@trebired/code-discipline 5.3.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +15 -12
  3. package/dist/checks/parse-failures.d.ts +8 -0
  4. package/dist/checks/parse-failures.d.ts.map +1 -0
  5. package/dist/checks/parse-failures.js +39 -0
  6. package/dist/checks/parse-failures.js.map +1 -0
  7. package/dist/checks/rules/banned/patterns.d.ts.map +1 -1
  8. package/dist/checks/rules/banned/patterns.js +18 -6
  9. package/dist/checks/rules/banned/patterns.js.map +1 -1
  10. package/dist/checks/rules/blank-lines/generic.d.ts.map +1 -1
  11. package/dist/checks/rules/blank-lines/generic.js +24 -2
  12. package/dist/checks/rules/blank-lines/generic.js.map +1 -1
  13. package/dist/checks/rules/blank-lines/index.d.ts.map +1 -1
  14. package/dist/checks/rules/blank-lines/index.js +3 -2
  15. package/dist/checks/rules/blank-lines/index.js.map +1 -1
  16. package/dist/checks/rules/comments/ranges.d.ts.map +1 -1
  17. package/dist/checks/rules/comments/ranges.js +115 -1
  18. package/dist/checks/rules/comments/ranges.js.map +1 -1
  19. package/dist/checks/rules/comments/stripping.d.ts +1 -2
  20. package/dist/checks/rules/comments/stripping.d.ts.map +1 -1
  21. package/dist/checks/rules/comments/stripping.js +7 -93
  22. package/dist/checks/rules/comments/stripping.js.map +1 -1
  23. package/dist/checks/rules/dry/candidates.d.ts.map +1 -1
  24. package/dist/checks/rules/dry/candidates.js +10 -4
  25. package/dist/checks/rules/dry/candidates.js.map +1 -1
  26. package/dist/checks/rules/dry/generic.d.ts.map +1 -1
  27. package/dist/checks/rules/dry/generic.js +43 -0
  28. package/dist/checks/rules/dry/generic.js.map +1 -1
  29. package/dist/checks/rules/dry/model.d.ts.map +1 -1
  30. package/dist/checks/rules/dry/model.js +5 -1
  31. package/dist/checks/rules/dry/model.js.map +1 -1
  32. package/dist/checks/rules/max/file-lines.d.ts.map +1 -1
  33. package/dist/checks/rules/max/file-lines.js +7 -50
  34. package/dist/checks/rules/max/file-lines.js.map +1 -1
  35. package/dist/checks/rules/max/function-lines.d.ts.map +1 -1
  36. package/dist/checks/rules/max/function-lines.js +36 -7
  37. package/dist/checks/rules/max/function-lines.js.map +1 -1
  38. package/dist/checks/rules/min/declaration-name.d.ts.map +1 -1
  39. package/dist/checks/rules/min/declaration-name.js +70 -2
  40. package/dist/checks/rules/min/declaration-name.js.map +1 -1
  41. package/dist/checks/rules/redundant-path-segments/index.d.ts.map +1 -1
  42. package/dist/checks/rules/redundant-path-segments/index.js +7 -25
  43. package/dist/checks/rules/redundant-path-segments/index.js.map +1 -1
  44. package/dist/checks/rules/remove-comments.d.ts.map +1 -1
  45. package/dist/checks/rules/remove-comments.js +15 -78
  46. package/dist/checks/rules/remove-comments.js.map +1 -1
  47. package/dist/imports/check.d.ts.map +1 -1
  48. package/dist/imports/check.js +6 -3
  49. package/dist/imports/check.js.map +1 -1
  50. package/dist/imports/scan.d.ts.map +1 -1
  51. package/dist/imports/scan.js +19 -110
  52. package/dist/imports/scan.js.map +1 -1
  53. package/dist/native/native.d.ts +2 -1
  54. package/dist/native/native.d.ts.map +1 -1
  55. package/dist/native/native.js +13 -8
  56. package/dist/native/native.js.map +1 -1
  57. package/dist/shared/constants.d.ts.map +1 -1
  58. package/dist/shared/constants.js +1 -1
  59. package/dist/shared/constants.js.map +1 -1
  60. package/dist/shared/languages.d.ts +3 -1
  61. package/dist/shared/languages.d.ts.map +1 -1
  62. package/dist/shared/languages.js +26 -3
  63. package/dist/shared/languages.js.map +1 -1
  64. package/native/darwin-arm64.node +0 -0
  65. package/native/darwin-x64.node +0 -0
  66. package/native/linux-arm64-gnu.node +0 -0
  67. package/native/linux-x64-gnu.node +0 -0
  68. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,38 @@ All notable changes to `@trebired/code-discipline` will be documented here.
4
4
 
5
5
  This project follows semantic versioning once published.
6
6
 
7
+ ## Unreleased
8
+
9
+ ## 5.4.0
10
+
11
+ - Added C++ and C# language support across `removeComments`, `formatting`, `maxFunctionLines`, `minDeclarationName`, `structuralBlankLines`, `dry`, and `redundantPathSegments`. C++ recognizes `.cpp`, `.cc`, `.cxx`, `.c++`, `.hpp`, `.hh`, `.hxx`, `.h++`, and `.h`; C# recognizes `.cs`.
12
+ - Taught the comment scanner and formatter about C++ raw strings (`R"delim(...)delim"`) and C# verbatim (`@"..."`) and interpolated (`$"..."`) strings, so comment-like content inside them is preserved.
13
+ - Added heuristic C++/C# function-span detection for `maxFunctionLines` and `dry`, since neither language has a fixed leading keyword like Go's `func` or Rust's `fn`: a line is treated as a function header when it contains a parenthesized signature, doesn't end in `;`, and isn't a control-flow statement (`if`, `for`, `catch`, `using`, and similar are excluded). This also covers Allman-style bodies where the opening brace is on its own line, which is the common C# convention.
14
+ - Fixed the native `should_continue_pending_block_function` check only ever inspecting the first line of a multi-line function header, which silently failed to detect any function whose opening brace was not on the same line as its signature. Go and Rust never hit this because both conventionally place the brace on the header line; it was a real risk for C#'s common brace-on-its-own-line style.
15
+ - Fixed the native comment scanner treating regular-expression literals as ordinary text, so a literal such as `/^r(#{0,16})"/` no longer desynchronizes string tracking. Previously the quote inside the pattern opened a phantom string, and `remove-comments` then mistook the `/*` inside a `"/*"` string literal for a real comment and deleted every line through the following `*/`.
16
+ - Fixed native formatter indentation drifting after a regular-expression literal that contains a quote or brace, which came from the same desynchronized masking.
17
+ - Applied regular-expression literal scanning to JavaScript, TypeScript, and QML only; Go, Rust, Python, shell, SCSS, and CSS keep treating `/` as division.
18
+ - Removed every TypeScript fallback implementation. Source scanning, `max-file-lines`, `redundant-path-segments` checks, `remove-comments`, and comment stripping now run only in the Rust backend, so a rule can no longer return different results depending on which backend ran or whether a progress observer was attached.
19
+ - Made the native backend required. `requireNativeBinding` throws a descriptive error naming the expected addon instead of silently degrading to TypeScript.
20
+ - Removed the `TB_CODE_DISCIPLINE_DISABLE_NATIVE` environment variable, which only existed to force the deleted fallback.
21
+ - Added token-based spacing normalization to `rules.formatting` for JavaScript, TypeScript, and QML. A real token scanner now backs the formatter, so `function outer(data:Data):void{` becomes `function outer(data: Data): void {`, `if(x===1){` becomes `if (x === 1) {`, `}else{` becomes `} else {`, and `[1,2,3]` becomes `[1, 2, 3]`.
22
+ - Kept generics, ternaries, optional chaining, unary operators, call chains, and regular-expression literals intact while normalizing spacing, including `Map<string, Array<number>>` and `<T extends Base>`.
23
+ - Guarded spacing normalization with a token-sequence invariant: the pass re-tokenizes its own output and falls back to the original text unless the token stream is byte-identical, so formatting can only ever change whitespace between tokens.
24
+ - Added single-quote to double-quote normalization for JavaScript and TypeScript string literals, skipping any literal whose contents would need re-escaping.
25
+ - Added statement semicolon insertion for JavaScript and TypeScript. Insertion is skipped inside parentheses, brackets, object literals, generic type arguments, `import`/`export` specifier lists, and after braceless `if`/`for`/`while`/`switch`/`catch`/`for await` headers, so control flow and type syntax are never rewritten.
26
+ - Excluded `.tsx` and `.jsx` from spacing and statement normalization; JSX is not yet modelled by the token scanner.
27
+ - Fixed the token scanner mis-reading regular-expression literals and comments nested inside template-literal `${...}` interpolations, which previously desynchronized quote tracking for the rest of the file.
28
+ - Preserved shebang lines verbatim instead of tokenizing them as source.
29
+ - Made parse failures non-fatal. A file that cannot be parsed is reported as a violation by each rule that skipped it and the run continues over the remaining files, instead of aborting the whole command with `Failed to parse`.
30
+
31
+ ## 5.3.2
32
+
33
+ - Aligned the package-owned Code Discipline config with the platform rule set, including formatting, redundant path segment cleanup, removable comment checks, structural blank lines, and dry checks.
34
+
35
+ ## 5.3.1
36
+
37
+ - Excluded TypeScript, JavaScript, and Sass module specifier text from `bannedPatterns` raw matching, so package imports can stay valid while hardcoded banned wording in actual source text is still reported.
38
+
7
39
  ## 5.3.0
8
40
 
9
41
  - Renamed `sourceFileStructure` to `redundantPathSegments` with the `redundant-path-segments` selector.
package/README.md CHANGED
@@ -10,7 +10,7 @@ Configurable repository discipline checks and rule-driven fixes for Bun projects
10
10
  - source cleanup rules such as removing comments across supported languages
11
11
  - structural spacing rules such as normalizing blank lines around JavaScript and TypeScript declarations
12
12
  - a built-in Rust formatter for the supported source languages
13
- - native acceleration with a TypeScript fallback for large codebases
13
+ - a required Rust native backend that keeps scanning and rewriting fast on large codebases
14
14
  - DRY enforcement through source-tree duplicate function grouping
15
15
 
16
16
  It is not a linter replacement or build system.
@@ -98,7 +98,7 @@ Reports files whose code line count is at or below `min`, defaulting to `1` when
98
98
 
99
99
  Reports named declarations whose names are shorter than `min`, defaulting to `2` when the rule is configured.
100
100
 
101
- JavaScript and TypeScript use the TypeScript AST for `function` declarations and simple `const` identifiers. Go, Rust, Python, QML, shell, SCSS, and CSS use language-aware declaration scanners for functions, declarations, properties, variables, and custom properties where those concepts exist.
101
+ JavaScript and TypeScript use the TypeScript AST for `function` declarations and simple `const` identifiers. Go, Rust, C++, C#, Python, QML, shell, SCSS, and CSS use language-aware declaration scanners for functions, declarations, properties, variables, and custom properties where those concepts exist.
102
102
 
103
103
  #### `maxCharactersPerLine`
104
104
 
@@ -132,7 +132,7 @@ Unsafe cases stay unchanged and remain reported after the fix pass. The fixer in
132
132
 
133
133
  Reports function-like declarations whose total span exceeds `max`.
134
134
 
135
- JavaScript and TypeScript use the TypeScript AST. Go and Rust use brace-aware function scanning. Python uses indentation-aware `def` and `async def` spans. Shell files with `.sh`, `.bash`, or `.zsh` use quote/comment-aware brace function spans. QML uses comment/string-aware scanning for JavaScript-style functions and signal-handler blocks.
135
+ JavaScript and TypeScript use the TypeScript AST. Go, Rust, C++, and C# use brace-aware function scanning; C++ and C# scanning has no fixed leading keyword, so it infers a header from a parenthesized signature that is not a control-flow statement. Python uses indentation-aware `def` and `async def` spans. Shell files with `.sh`, `.bash`, or `.zsh` use quote/comment-aware brace function spans. QML uses comment/string-aware scanning for JavaScript-style functions and signal-handler blocks.
136
136
 
137
137
  #### `redundantPathSegments`
138
138
 
@@ -140,7 +140,7 @@ Normalizes source file paths. It detects flat compound names such as `user_route
140
140
 
141
141
  The rule config describes compound-name separators. Whether it mutates is decided by running `code-discipline fix`.
142
142
 
143
- Redundant path segment scans and moves supported source files across JavaScript, TypeScript, Go, Rust, Python, QML, shell, SCSS, and CSS. Move-aware import repair is applied for languages whose import syntax is package-supported.
143
+ Redundant path segment scans and moves supported source files across JavaScript, TypeScript, Go, Rust, C++, C#, Python, QML, shell, SCSS, and CSS. Move-aware import repair is applied for languages whose import syntax is package-supported.
144
144
 
145
145
  #### `imports`
146
146
 
@@ -151,7 +151,7 @@ Validates and optionally fixes:
151
151
  - `project-manifests` output drift in root `tsconfig.json` and `package.json#imports`
152
152
  - `alias-map` output drift in `.trebired/code-discipline/imports/*.json` and the generated tsconfig projection
153
153
 
154
- `imports` rewrites JavaScript, TypeScript, and SCSS module specifiers. Mixed-language repositories can still include Go, Rust, Python, QML, and extension-bearing shell files; those files are ignored by alias syncing instead of causing parser failures.
154
+ `imports` rewrites JavaScript, TypeScript, and SCSS module specifiers. Mixed-language repositories can still include Go, Rust, C++, C#, Python, QML, and extension-bearing shell files; those files are ignored by alias syncing instead of causing parser failures.
155
155
 
156
156
  When `imports` sees a relative import that resolves nowhere, check mode reports it. Fix mode removes safe line-isolated static import/export declarations and Sass `@use`, `@forward`, or single-specifier quoted `@import` directives. Dynamic `import(...)`, comments, strings, CSS `url(...)`, and arbitrary CSS values are left alone.
157
157
 
@@ -196,12 +196,14 @@ The rule supports the same language families this package currently scans for di
196
196
  - JavaScript and TypeScript
197
197
  - Go
198
198
  - Rust
199
+ - C++
200
+ - C#
199
201
  - Python
200
202
  - QML
201
203
  - shell files with `.sh`, `.bash`, or `.zsh`
202
204
  - SCSS and CSS
203
205
 
204
- It keeps string, regex, rune, char, byte-string, raw-string, Python triple-string, QML string/template/regex literal, shell quoted-string, and shell heredoc content intact while removing actual source comments. Python shebang and encoding comments are preserved, and shell shebangs are preserved. When a removed comment occupied the whole line, that empty line is removed in the same file rewrite.
206
+ It keeps string, regex, rune, char, byte-string, raw-string, C++ raw-string, C# verbatim and interpolated string, Python triple-string, QML string/template/regex literal, shell quoted-string, and shell heredoc content intact while removing actual source comments. Python shebang and encoding comments are preserved, and shell shebangs are preserved. When a removed comment occupied the whole line, that empty line is removed in the same file rewrite.
205
207
 
206
208
  You can preserve specific comments by matching plain substrings inside the comment text itself, without hardcoding any comment syntax:
207
209
 
@@ -225,7 +227,7 @@ Reports supported source files where major structural sections aren't visually s
225
227
 
226
228
  JavaScript and TypeScript use the TypeScript AST: after the file header, between imports and the first non-import statement, between declaration groups (variables, types, functions, classes, enums, namespaces), and between class fields/methods/constructors. Compact groups - consecutive imports, variables, type declarations, re-exports, top-level executable statements, class fields, directive prologues, function overload chains, and getter/setter pairs - allow zero or one blank line and only collapse two or more down to one.
227
229
 
228
- Go, Rust, Python, QML, shell, SCSS, and CSS use language-aware structural scanning to normalize blank lines between adjacent top-level declarations, functions, handlers, or rules in the same scope.
230
+ Go, Rust, C++, C#, Python, QML, shell, SCSS, and CSS use language-aware structural scanning to normalize blank lines between adjacent top-level declarations, functions, handlers, or rules in the same scope.
229
231
 
230
232
  It never touches statements inside function or method bodies, `if`/loop/`try` bodies, object literals, array elements, interface members, type literal members, enum members, or JSX children - spacing choices inside those remain up to the developer.
231
233
 
@@ -244,7 +246,7 @@ code-discipline fix structural-blank-lines
244
246
  Reports duplicate function groups across the configured source tree.
245
247
 
246
248
  - JavaScript and TypeScript use AST-aware structural and behavior fingerprints
247
- - Go, Rust, Python, QML, and shell use language-aware function spans with conservative token fingerprints
249
+ - Go, Rust, C++, C#, Python, QML, and shell use language-aware function spans with conservative token fingerprints
248
250
  - exact normalized structure is reported with 100% confidence
249
251
  - equivalent normalized behavior in simple pure functions is reported with 100% confidence
250
252
  - matching function names are reported with 100% confidence
@@ -513,7 +515,7 @@ The package-owned Rust formatter is enabled as a rule with `rules.formatting: {}
513
515
 
514
516
  `check format` validates formatting without modifying files, while `fix format` writes formatted files. Running `code-discipline fix` with no selectors runs configured formatting after structural, import, comment, and blank-line fixes, then rechecks `max-characters-per-line` when that rule is configured.
515
517
 
516
- The formatter supports JavaScript, TypeScript, Go, Rust, Python, QML, shell files with `.sh`, `.bash`, or `.zsh`, SCSS, and CSS. It normalizes line endings, trailing whitespace, final newline, repeated blank lines, brace-language indentation, indentation-sensitive language whitespace, compact QML blocks, and safe line wrapping against `rules.maxCharactersPerLine.max`.
518
+ The formatter supports JavaScript, TypeScript, Go, Rust, C++, C#, Python, QML, shell files with `.sh`, `.bash`, or `.zsh`, SCSS, and CSS. It normalizes line endings, trailing whitespace, final newline, repeated blank lines, brace-language indentation, indentation-sensitive language whitespace, compact QML blocks, and safe line wrapping against `rules.maxCharactersPerLine.max`.
517
519
 
518
520
  If `rules.maxCharactersPerLine.max` is configured, the formatter uses that width. Without that rule, formatter line width defaults to `100`.
519
521
 
@@ -534,15 +536,16 @@ rules: {
534
536
 
535
537
  ### Native Backend
536
538
 
537
- `@trebired/code-discipline` can use a Rust native backend when a matching binary is available, with the TypeScript implementation as the fallback. This follows the same native-fast-path shape as `@trebired/logger`: package users keep the same CLI/API, while hot scanning and rewrite paths can move into Rust.
539
+ `@trebired/code-discipline` requires a Rust native backend. There is no TypeScript fallback: source scanning, comment stripping, and formatting have exactly one implementation, so a rule can never produce different results depending on which backend happened to run. If no matching binary can be loaded, the package throws instead of silently degrading.
538
540
 
539
- The current native backend accelerates source scanning, `max-file-lines`, common `max-function-lines` paths, `redundant-path-segments` checks, and `remove-comments`. Its comment scanner understands JavaScript, TypeScript, Go, Rust, Python, QML, shell, SCSS, and CSS. If no binary is present, the package automatically uses the TypeScript fallback.
541
+ For JavaScript, TypeScript, and QML the formatter also normalizes spacing around operators and punctuation from a real token stream, so declarations, control-flow headers, and literals print consistently without reflowing statements. For JavaScript and TypeScript it additionally normalizes single-quoted strings to double quotes and terminates statements with semicolons. JSX (`.tsx`, `.jsx`) is excluded from both passes.
542
+
543
+ The native backend owns source scanning, `max-file-lines`, `redundant-path-segments` checks, `remove-comments`, and `formatting`, and accelerates common `max-function-lines` paths. Its comment scanner understands JavaScript, TypeScript, Go, Rust, C++, C#, Python, QML, shell, SCSS, and CSS, including regular-expression literals in JavaScript, TypeScript, and QML.
540
544
 
541
545
  Useful native controls:
542
546
 
543
547
  - `bun run build:native` builds the host native addon into `native/<platform>.node`
544
548
  - `bun run build:native:matrix` builds the release target matrix
545
- - `TB_CODE_DISCIPLINE_DISABLE_NATIVE=1` forces the TypeScript fallback
546
549
  - `TB_CODE_DISCIPLINE_NATIVE_BINARY=/path/to/addon.node` loads a specific native addon
547
550
 
548
551
  Top-level `sync` is gone.
@@ -0,0 +1,8 @@
1
+ import { ParseFailureError } from "../shared/errors.js";
2
+ import type { CodeDisciplineRuleName, CodeDisciplineViolation } from "../shared/discipline-types.js";
3
+ declare function isParseFailureError(error: unknown): error is ParseFailureError;
4
+ declare function parseFailureDiagnostics(error: ParseFailureError): string[];
5
+ declare function createParseFailureViolation(rule: CodeDisciplineRuleName, filePath: string, error: ParseFailureError): CodeDisciplineViolation;
6
+ declare function collectWithParseFailure<T>(rule: CodeDisciplineRuleName, filePath: string, violations: CodeDisciplineViolation[], run: () => Promise<T> | T): Promise<T | null>;
7
+ export { collectWithParseFailure, createParseFailureViolation, isParseFailureError, parseFailureDiagnostics, };
8
+ //# sourceMappingURL=parse-failures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-failures.d.ts","sourceRoot":"","sources":["../../src/checks/parse-failures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAErF,iBAAS,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAEvE;AAED,iBAAS,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAKnE;AAED,iBAAS,2BAA2B,CAClC,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,GACvB,uBAAuB,CAczB;AAED,iBAAe,uBAAuB,CAAC,CAAC,EACtC,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,uBAAuB,EAAE,EACrC,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACxB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAQnB;AAED,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,GACxB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { ParseFailureError } from "../shared/errors.js";
2
+ function isParseFailureError(error) {
3
+ return error instanceof ParseFailureError;
4
+ }
5
+ function parseFailureDiagnostics(error) {
6
+ const diagnostics = error.details?.diagnostics;
7
+ if (Array.isArray(diagnostics))
8
+ return diagnostics.map((entry) => String(entry));
9
+ if (typeof diagnostics === "string")
10
+ return [diagnostics];
11
+ return [];
12
+ }
13
+ function createParseFailureViolation(rule, filePath, error) {
14
+ const diagnostics = parseFailureDiagnostics(error);
15
+ const summary = diagnostics[0] ?? "unknown parse error";
16
+ return {
17
+ rule,
18
+ fix: false,
19
+ filePath,
20
+ message: `file could not be parsed and was skipped by ${rule}: ${summary}`,
21
+ details: {
22
+ parseFailure: true,
23
+ diagnostics,
24
+ },
25
+ };
26
+ }
27
+ async function collectWithParseFailure(rule, filePath, violations, run) {
28
+ try {
29
+ return await run();
30
+ }
31
+ catch (caught) {
32
+ if (!isParseFailureError(caught))
33
+ throw caught;
34
+ violations.push(createParseFailureViolation(rule, filePath, caught));
35
+ return null;
36
+ }
37
+ }
38
+ export { collectWithParseFailure, createParseFailureViolation, isParseFailureError, parseFailureDiagnostics, };
39
+ //# sourceMappingURL=parse-failures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-failures.js","sourceRoot":"","sources":["../../src/checks/parse-failures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC5C,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAwB;IACvD,MAAM,WAAW,GAAI,KAAK,CAAC,OAAiD,EAAE,WAAW,CAAC;IAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,2BAA2B,CAClC,IAA4B,EAC5B,QAAgB,EAChB,KAAwB;IAExB,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC;IAExD,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,KAAK;QACV,QAAQ;QACR,OAAO,EAAE,+CAA+C,IAAI,KAAK,OAAO,EAAE;QAC1E,OAAO,EAAE;YACP,YAAY,EAAE,IAAI;YAClB,WAAW;SACZ;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,IAA4B,EAC5B,QAAgB,EAChB,UAAqC,EACrC,GAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAAE,MAAM,MAAM,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,GACxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/banned/patterns.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAoF7D,iBAAe,8BAA8B,CAC3C,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAiDpC;AAED,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/banned/patterns.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AA+F7D,iBAAe,8BAA8B,CAC3C,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAkDpC;AAED,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
- import { parseSource } from "../../../imports/module-specifiers.js";
3
+ import { collectModuleSpecifiers, parseSource } from "../../../imports/module-specifiers.js";
4
4
  import { isTypeScriptFamilyExtension } from "../../../shared/languages.js";
5
5
  import { createRuleProgress, emitRuleChunk, emitRuleCompleted } from "../../progress.js";
6
6
  import { CODE_DISCIPLINE_STATE_DIR } from "../../../shared/constants.js";
@@ -34,17 +34,28 @@ function collectPackageStatePathSpans(text) {
34
34
  function isInsideSpan(index, spans) {
35
35
  return spans.some((span) => index >= span.start && index < span.end);
36
36
  }
37
- function countOccurrencesOutsidePackageStatePath(text, pattern) {
37
+ function collectModuleSpecifierSpansSafely(text, filePath) {
38
+ try {
39
+ return collectModuleSpecifiers(text, filePath).map((specifier) => ({
40
+ start: specifier.start,
41
+ end: specifier.end,
42
+ }));
43
+ }
44
+ catch {
45
+ return [];
46
+ }
47
+ }
48
+ function countOccurrencesOutsideIgnoredSpans(text, pattern, ignoredSpans = []) {
38
49
  if (!pattern)
39
50
  return 0;
40
- const packageStatePathSpans = collectPackageStatePathSpans(text);
51
+ const spans = [...collectPackageStatePathSpans(text), ...ignoredSpans];
41
52
  let count = 0;
42
53
  let index = 0;
43
54
  while (index <= text.length - pattern.length) {
44
55
  const matchIndex = text.indexOf(pattern, index);
45
56
  if (matchIndex < 0)
46
57
  break;
47
- if (!isInsideSpan(matchIndex, packageStatePathSpans))
58
+ if (!isInsideSpan(matchIndex, spans))
48
59
  count += 1;
49
60
  index = matchIndex + 1;
50
61
  }
@@ -86,14 +97,15 @@ async function collectBannedPatternViolations(sourceFiles, options) {
86
97
  const file = sourceFiles[index];
87
98
  const text = await fs.readFile(file.absolutePath, "utf8");
88
99
  const normalizedText = text.toLowerCase();
100
+ const moduleSpecifierSpans = collectModuleSpecifierSpansSafely(text, file.absolutePath);
89
101
  const foldedMatches = collectFoldedMatchesSafely(text, file.absolutePath);
90
102
  for (const pattern of rule.patterns) {
91
103
  if (pattern.allowedFiles.includes(file.relativeFromProjectRoot))
92
104
  continue;
93
105
  const rawOccurrences = normalizedText.includes(pattern.normalizedValue)
94
- ? countOccurrencesOutsidePackageStatePath(normalizedText, pattern.normalizedValue)
106
+ ? countOccurrencesOutsideIgnoredSpans(normalizedText, pattern.normalizedValue, moduleSpecifierSpans)
95
107
  : 0;
96
- const patternFoldedMatches = foldedMatches.filter((match) => countOccurrencesOutsidePackageStatePath(match.value.toLowerCase(), pattern.normalizedValue) > 0);
108
+ const patternFoldedMatches = foldedMatches.filter((match) => countOccurrencesOutsideIgnoredSpans(match.value.toLowerCase(), pattern.normalizedValue) > 0);
97
109
  if (rawOccurrences === 0 && patternFoldedMatches.length === 0)
98
110
  continue;
99
111
  violations.push({
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../../src/checks/rules/banned/patterns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../../src/checks/rules/banned/patterns.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/generic.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAsB,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAGjF,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AA6QF,iBAAS,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAO/F;AAED,iBAAS,kCAAkC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,wBAAwB,CAKrG;AAED,OAAO,EAAE,6BAA6B,EAAE,kCAAkC,EAAE,CAAC"}
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/generic.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAsB,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAGjF,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAmSF,iBAAS,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAc/F;AAED,iBAAS,kCAAkC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,wBAAwB,CAKrG;AAED,OAAO,EAAE,6BAA6B,EAAE,kCAAkC,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { isGoExtension, isPythonExtension, isQmlExtension, isRustExtension, isShellExtension, isStyleExtension, } from "../../../shared/languages.js";
1
+ import { isCppExtension, isCsharpExtension, isGoExtension, isPythonExtension, isQmlExtension, isRustExtension, isShellExtension, isStyleExtension, } from "../../../shared/languages.js";
2
2
  import { maskQmlCommentsAndStrings } from "../comments/qml.js";
3
3
  import { stripCommentsAndStrings } from "../max/strip.js";
4
4
  import { measurePythonIndent, updatePythonTripleState, } from "../max/python.js";
@@ -77,6 +77,20 @@ function maskBraceLanguage(text, extension) {
77
77
  return stripCommentsAndStrings(maskRustRawStrings(text));
78
78
  return stripCommentsAndStrings(text);
79
79
  }
80
+ const C_FAMILY_BLANK_LINES_EXCLUDED_LEADING_WORDS = new Set([
81
+ "if", "else", "for", "while", "do", "switch", "case", "catch", "try", "finally",
82
+ "using", "lock", "foreach", "return", "throw", "new",
83
+ ]);
84
+ function isCFamilyBraceUnitStart(trimmed) {
85
+ if (/^(?:template\s*<[^>]*>\s*)?(?:(?:public|private|protected|internal|static|sealed|abstract|partial|virtual|override|readonly|inline|explicit|constexpr|friend)\s+)*(?:namespace|class|struct|interface|enum(?:\s+class)?)\s+[A-Za-z_]/u.test(trimmed)) {
86
+ return true;
87
+ }
88
+ if (!trimmed.includes("(") || trimmed.endsWith(";") || trimmed.startsWith("#") || trimmed.startsWith("[") || trimmed.startsWith("@")) {
89
+ return false;
90
+ }
91
+ const leadingWord = /[A-Za-z_]\w*/u.exec(trimmed)?.[0] ?? "";
92
+ return !C_FAMILY_BLANK_LINES_EXCLUDED_LEADING_WORDS.has(leadingWord);
93
+ }
80
94
  function countMaskedBraceDelta(line) {
81
95
  let delta = 0;
82
96
  for (const character of line) {
@@ -105,6 +119,9 @@ function isBraceUnitStart(line, extension) {
105
119
  if (isStyleExtension(extension)) {
106
120
  return trimmed.includes("{") && !trimmed.startsWith("}");
107
121
  }
122
+ if (isCppExtension(extension) || isCsharpExtension(extension)) {
123
+ return isCFamilyBraceUnitStart(trimmed);
124
+ }
108
125
  return false;
109
126
  }
110
127
  function collectBraceStructuralUnits(text, extension) {
@@ -227,7 +244,12 @@ function collectGenericStructuralUnits(text, extension) {
227
244
  return collectPythonStructuralUnits(text);
228
245
  if (isShellExtension(extension))
229
246
  return collectShellStructuralUnits(text);
230
- if (isGoExtension(extension) || isRustExtension(extension) || isQmlExtension(extension) || isStyleExtension(extension)) {
247
+ if (isGoExtension(extension)
248
+ || isRustExtension(extension)
249
+ || isCppExtension(extension)
250
+ || isCsharpExtension(extension)
251
+ || isQmlExtension(extension)
252
+ || isStyleExtension(extension)) {
231
253
  return collectBraceStructuralUnits(text, extension);
232
254
  }
233
255
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/generic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/generic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AA+BvG,iBAAe,qCAAqC,CAClD,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAgCpC;AAED,iBAAe,2BAA2B,CACxC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,2BAA2B,CAAC,CA2CtC;AAED,OAAO,EAAE,qCAAqC,EAAE,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAoC,EAAE,MAAM,eAAe,CAAC;AAgCvG,iBAAe,qCAAqC,CAClD,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAqCpC;AAED,iBAAe,2BAA2B,CACxC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,2BAA2B,CAAC,CA2CtC;AAED,OAAO,EAAE,qCAAqC,EAAE,2BAA2B,EAAE,CAAC"}
@@ -4,6 +4,7 @@ import { parseSource } from "../../../imports/module-specifiers.js";
4
4
  import { isTypeScriptFamilyExtension, supportsStructuralBlankLines } from "../../../shared/languages.js";
5
5
  import { createRuleProgress, emitRuleChunk, emitRuleCompleted } from "../../progress.js";
6
6
  import { rewriteGenericStructuralBlankLines } from "./generic.js";
7
+ import { collectWithParseFailure } from "../../parse-failures.js";
7
8
  import { rewriteStructuralBlankLines } from "./rewrite.js";
8
9
  function createStructuralBlankLinesViolation(args) {
9
10
  return {
@@ -39,8 +40,8 @@ async function collectStructuralBlankLinesViolations(sourceFiles, options) {
39
40
  continue;
40
41
  }
41
42
  const sourceText = await fs.readFile(file.absolutePath, "utf8");
42
- const result = rewriteStructuralBlankLinesForFile(file, sourceText);
43
- if (result.changed) {
43
+ const result = await collectWithParseFailure("structural-blank-lines", file.relativeFromProjectRoot, violations, () => rewriteStructuralBlankLinesForFile(file, sourceText));
44
+ if (result?.changed) {
44
45
  violations.push(createStructuralBlankLinesViolation({
45
46
  filePath: file.relativeFromProjectRoot,
46
47
  boundaryCount: result.boundaryCount,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/checks/rules/blank-lines/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ranges.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/comments/ranges.ts"],"names":[],"mappings":"AAiBA,KAAK,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpC,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAwEF,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4BrE;AAqFD,iBAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAS7E;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"ranges.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/comments/ranges.ts"],"names":[],"mappings":"AAmBA,KAAK,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpC,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAwEF,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4BrE;AAyND,iBAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAW7E;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import ts from "typescript";
2
- import { isGoExtension, isPythonExtension, isQmlExtension, isRustExtension, isShellExtension, isStyleExtension, isTypeScriptFamilyExtension, } from "../../../shared/languages.js";
2
+ import { isCppExtension, isCsharpExtension, isGoExtension, isPythonExtension, isQmlExtension, isRustExtension, isShellExtension, isStyleExtension, isTypeScriptFamilyExtension, } from "../../../shared/languages.js";
3
3
  import { scanSlashBlockComment, scanSlashLineComment } from "./c-like.js";
4
4
  import { collectPythonCommentRanges } from "./python.js";
5
5
  import { collectQmlCommentRanges } from "./qml.js";
@@ -161,6 +161,116 @@ function collectRustCommentRanges(text) {
161
161
  }
162
162
  return ranges;
163
163
  }
164
+ function scanCppRawStringDelimiterEnd(text, start) {
165
+ for (let index = start; index < Math.min(text.length, start + 16); index += 1) {
166
+ const character = text[index];
167
+ if (character === "(")
168
+ return index;
169
+ if (character === ")" || character === "\\" || /\s/u.test(character ?? ""))
170
+ return null;
171
+ }
172
+ return null;
173
+ }
174
+ function scanCppRawString(text, start) {
175
+ if (text[start] !== "R" || text[start + 1] !== "\"")
176
+ return null;
177
+ const delimiterStart = start + 2;
178
+ const parenIndex = scanCppRawStringDelimiterEnd(text, delimiterStart);
179
+ if (parenIndex == null)
180
+ return null;
181
+ const delimiter = text.slice(delimiterStart, parenIndex);
182
+ const close = `)${delimiter}"`;
183
+ const closeIndex = text.indexOf(close, parenIndex);
184
+ return closeIndex < 0 ? text.length : closeIndex + close.length;
185
+ }
186
+ function collectCppCommentRanges(text) {
187
+ const ranges = [];
188
+ let index = 0;
189
+ while (index < text.length) {
190
+ const rawStringEnd = scanCppRawString(text, index);
191
+ if (rawStringEnd != null) {
192
+ index = rawStringEnd;
193
+ continue;
194
+ }
195
+ const char = text[index];
196
+ const next = text[index + 1];
197
+ if (char === "/" && next === "/") {
198
+ const end = scanSlashLineComment(text, index);
199
+ ranges.push({ start: index, end, kind: "line" });
200
+ index = end;
201
+ continue;
202
+ }
203
+ if (char === "/" && next === "*") {
204
+ const end = scanSlashBlockComment(text, index, false);
205
+ ranges.push({ start: index, end, kind: "block" });
206
+ index = end;
207
+ continue;
208
+ }
209
+ if (char === "\"" || char === "'") {
210
+ index = scanEscapedQuotedLiteral(text, index, char);
211
+ continue;
212
+ }
213
+ index += 1;
214
+ }
215
+ return ranges;
216
+ }
217
+ function scanCsharpVerbatimString(text, quoteStart) {
218
+ let index = quoteStart + 1;
219
+ while (index < text.length) {
220
+ if (text[index] === "\"") {
221
+ if (text[index + 1] === "\"") {
222
+ index += 2;
223
+ continue;
224
+ }
225
+ return index + 1;
226
+ }
227
+ index += 1;
228
+ }
229
+ return text.length;
230
+ }
231
+ function collectCsharpCommentRanges(text) {
232
+ const ranges = [];
233
+ let index = 0;
234
+ while (index < text.length) {
235
+ const char = text[index];
236
+ const next = text[index + 1];
237
+ const afterNext = text[index + 2];
238
+ if (char === "@" && next === "\"") {
239
+ index = scanCsharpVerbatimString(text, index + 1);
240
+ continue;
241
+ }
242
+ if (char === "@" && next === "$" && afterNext === "\"") {
243
+ index = scanCsharpVerbatimString(text, index + 2);
244
+ continue;
245
+ }
246
+ if (char === "$" && next === "@" && afterNext === "\"") {
247
+ index = scanCsharpVerbatimString(text, index + 2);
248
+ continue;
249
+ }
250
+ if (char === "$" && next === "\"") {
251
+ index = scanEscapedQuotedLiteral(text, index + 1, "\"");
252
+ continue;
253
+ }
254
+ if (char === "\"" || char === "'") {
255
+ index = scanEscapedQuotedLiteral(text, index, char);
256
+ continue;
257
+ }
258
+ if (char === "/" && next === "/") {
259
+ const end = scanSlashLineComment(text, index);
260
+ ranges.push({ start: index, end, kind: "line" });
261
+ index = end;
262
+ continue;
263
+ }
264
+ if (char === "/" && next === "*") {
265
+ const end = scanSlashBlockComment(text, index, false);
266
+ ranges.push({ start: index, end, kind: "block" });
267
+ index = end;
268
+ continue;
269
+ }
270
+ index += 1;
271
+ }
272
+ return ranges;
273
+ }
164
274
  function collectCommentRanges(text, extension) {
165
275
  if (isTypeScriptFamilyExtension(extension))
166
276
  return collectTypeScriptCommentRanges(text, extension);
@@ -168,6 +278,10 @@ function collectCommentRanges(text, extension) {
168
278
  return collectGoCommentRanges(text);
169
279
  if (isRustExtension(extension))
170
280
  return collectRustCommentRanges(text);
281
+ if (isCppExtension(extension))
282
+ return collectCppCommentRanges(text);
283
+ if (isCsharpExtension(extension))
284
+ return collectCsharpCommentRanges(text);
171
285
  if (isPythonExtension(extension))
172
286
  return collectPythonCommentRanges(text);
173
287
  if (isShellExtension(extension))