@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.
- package/CHANGELOG.md +32 -0
- package/README.md +15 -12
- package/dist/checks/parse-failures.d.ts +8 -0
- package/dist/checks/parse-failures.d.ts.map +1 -0
- package/dist/checks/parse-failures.js +39 -0
- package/dist/checks/parse-failures.js.map +1 -0
- package/dist/checks/rules/banned/patterns.d.ts.map +1 -1
- package/dist/checks/rules/banned/patterns.js +18 -6
- package/dist/checks/rules/banned/patterns.js.map +1 -1
- package/dist/checks/rules/blank-lines/generic.d.ts.map +1 -1
- package/dist/checks/rules/blank-lines/generic.js +24 -2
- package/dist/checks/rules/blank-lines/generic.js.map +1 -1
- package/dist/checks/rules/blank-lines/index.d.ts.map +1 -1
- package/dist/checks/rules/blank-lines/index.js +3 -2
- package/dist/checks/rules/blank-lines/index.js.map +1 -1
- package/dist/checks/rules/comments/ranges.d.ts.map +1 -1
- package/dist/checks/rules/comments/ranges.js +115 -1
- package/dist/checks/rules/comments/ranges.js.map +1 -1
- package/dist/checks/rules/comments/stripping.d.ts +1 -2
- package/dist/checks/rules/comments/stripping.d.ts.map +1 -1
- package/dist/checks/rules/comments/stripping.js +7 -93
- package/dist/checks/rules/comments/stripping.js.map +1 -1
- package/dist/checks/rules/dry/candidates.d.ts.map +1 -1
- package/dist/checks/rules/dry/candidates.js +10 -4
- package/dist/checks/rules/dry/candidates.js.map +1 -1
- package/dist/checks/rules/dry/generic.d.ts.map +1 -1
- package/dist/checks/rules/dry/generic.js +43 -0
- package/dist/checks/rules/dry/generic.js.map +1 -1
- package/dist/checks/rules/dry/model.d.ts.map +1 -1
- package/dist/checks/rules/dry/model.js +5 -1
- package/dist/checks/rules/dry/model.js.map +1 -1
- package/dist/checks/rules/max/file-lines.d.ts.map +1 -1
- package/dist/checks/rules/max/file-lines.js +7 -50
- package/dist/checks/rules/max/file-lines.js.map +1 -1
- package/dist/checks/rules/max/function-lines.d.ts.map +1 -1
- package/dist/checks/rules/max/function-lines.js +36 -7
- package/dist/checks/rules/max/function-lines.js.map +1 -1
- package/dist/checks/rules/min/declaration-name.d.ts.map +1 -1
- package/dist/checks/rules/min/declaration-name.js +70 -2
- package/dist/checks/rules/min/declaration-name.js.map +1 -1
- package/dist/checks/rules/redundant-path-segments/index.d.ts.map +1 -1
- package/dist/checks/rules/redundant-path-segments/index.js +7 -25
- package/dist/checks/rules/redundant-path-segments/index.js.map +1 -1
- package/dist/checks/rules/remove-comments.d.ts.map +1 -1
- package/dist/checks/rules/remove-comments.js +15 -78
- package/dist/checks/rules/remove-comments.js.map +1 -1
- package/dist/imports/check.d.ts.map +1 -1
- package/dist/imports/check.js +6 -3
- package/dist/imports/check.js.map +1 -1
- package/dist/imports/scan.d.ts.map +1 -1
- package/dist/imports/scan.js +19 -110
- package/dist/imports/scan.js.map +1 -1
- package/dist/native/native.d.ts +2 -1
- package/dist/native/native.d.ts.map +1 -1
- package/dist/native/native.js +13 -8
- package/dist/native/native.js.map +1 -1
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +1 -1
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/languages.d.ts +3 -1
- package/dist/shared/languages.d.ts.map +1 -1
- package/dist/shared/languages.js +26 -3
- package/dist/shared/languages.js.map +1 -1
- package/native/darwin-arm64.node +0 -0
- package/native/darwin-x64.node +0 -0
- package/native/linux-arm64-gnu.node +0 -0
- package/native/linux-x64-gnu.node +0 -0
- 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
|
|
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
|
|
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`
|
|
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
|
-
|
|
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;
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
?
|
|
106
|
+
? countOccurrencesOutsideIgnoredSpans(normalizedText, pattern.normalizedValue, moduleSpecifierSpans)
|
|
95
107
|
: 0;
|
|
96
|
-
const patternFoldedMatches = foldedMatches.filter((match) =>
|
|
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":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
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":"
|
|
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)
|
|
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;
|
|
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
|
|
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":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,SAAS,mCAAmC,CAAC,IAK5C;IACC,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,YAAY,IAAI,CAAC,aAAa,sBAAsB,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,oCAAoC;QACvI,OAAO,EAAE;YACP,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAuB,EAAE,UAAkB;IACrF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,IAAI,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,OAAO,2BAA2B,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,kCAAkC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,qCAAqC,CAClD,WAAgC,EAChC,OAA6C;IAE7C,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,QAAQ,EAAE,OAAO,CAAC,gBAAgB;QAClC,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,WAAW,CAAC,MAAM;KAC/B,CAAC,CAAC;IAEH,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAE,CAAC;QACjC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,aAAa,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,kCAAkC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;
|
|
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":"
|
|
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))
|