mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 19:41:07 +01:00
This is improving the comment production to produce fewer distinct comments. At present, comment processing uses strict prefix matching. It either expects `// ` (with a space) for valid comments, or just `//` (without a space) for invalid comments that lacked the space. As a consequence, the following would be three comments: ``` // Comment 1 // // // Comment 4 ``` This is because a 3-character prefix is used for valid comments. The prefix switches between lines 1 and 2, and again between lines 3 and 4, each resulting in a separate comment. For contrast, this is one comment because only a 2-character prefix is used: ``` //Comment 1 // // //Comment 4 ``` That's because all lines lack a suffix space. Additionally, with SIMD 16-byte boundaries, further splits can occur if processing needs to transition to non-SIMD. Here, I'm trying to just address all of this by: 1. Stitching together adjacent comments. Since a lexed comment starts at the `//` excluding the indent, the delta from the prior comment must be precisely the indent. 2. Adding support for switching from SIMD to non-SIMD on file boundaries. I considered trying to have a separate `//\n` prefix for SIMD processing of `// `, but I wasn't sure about the tradeoff of doing both at the same time (in particular, it'd require constructing a string for the different prefix), thus this stitch approach. This does mean multiple passes will be required for a typical long comment structure using blank comment lines to separate paragraphs (for performance reasons, I will recommend engineers not write comm... nevermind). --------- Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
54 lines
1.2 KiB
Plaintext
54 lines
1.2 KiB
Plaintext
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
// AUTOUPDATE
|
|
// TIP: To test this file alone, run:
|
|
// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/format/testdata/basics/comments.carbon
|
|
// TIP: To dump output, run:
|
|
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/format/testdata/basics/comments.carbon
|
|
|
|
// --- test.carbon
|
|
|
|
// A comment
|
|
fn F() {}
|
|
|
|
// Another comment
|
|
|
|
// Block
|
|
// comment
|
|
|
|
|
|
class C {
|
|
// Internal comment
|
|
}
|
|
|
|
|
|
// Another
|
|
// Block
|
|
//
|
|
// Comment
|
|
|
|
// --- AUTOUPDATE-SPLIT
|
|
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: // A comment
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: fn F ( ) { }
|
|
// CHECK:STDOUT: // Another comment
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: // Block
|
|
// CHECK:STDOUT: // comment
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: class C {
|
|
// CHECK:STDOUT: // Internal comment
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: }
|
|
// CHECK:STDOUT: // Another
|
|
// CHECK:STDOUT: // Block
|
|
// CHECK:STDOUT: //
|
|
// CHECK:STDOUT: // Comment
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT:
|