@kongyo2/ts-comment-scanner 1.2.1 → 1.3.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/README.en.md +11 -2
- package/README.md +11 -2
- package/dist/directives.d.ts +4 -2
- package/dist/directives.d.ts.map +1 -1
- package/dist/directives.js +226 -10
- package/dist/directives.js.map +1 -1
- package/dist/remove.js +47 -7
- package/dist/remove.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +28 -10
- package/dist/scanner.js.map +1 -1
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -138,7 +138,7 @@ ts-comment-scanner --remove --remove-directives --remove-legal src
|
|
|
138
138
|
Removal is driven by the AST's comment ranges, so it never touches strings or code. In addition:
|
|
139
139
|
|
|
140
140
|
- Directives such as `@ts-expect-error` / `eslint-disable` are **kept by default**, because removing them would break the build or the linter
|
|
141
|
-
- Legal comments — `/*! ... */` or those containing `@license` / `@preserve` / `@copyright` — are also **kept by default**
|
|
141
|
+
- Legal comments — `/*! ... */` or those containing `@license` / `@preserve` / `@copyright` or the `SPDX-License-Identifier:` / `SPDX-FileCopyrightText:` tags — are also **kept by default**
|
|
142
142
|
- Whitespace is inserted where removing a block comment would otherwise join tokens together (`a/* x */b` → `a b`)
|
|
143
143
|
- Comment-only lines are removed entirely, and trailing comments are removed together with the preceding whitespace
|
|
144
144
|
- The result is re-scanned to verify it, and if the outcome is unexpected the file is left unchanged and an error is reported
|
|
@@ -162,7 +162,16 @@ This is designed for workflows like letting a coding agent do some work and then
|
|
|
162
162
|
|
|
163
163
|
### Detectable directives (excerpt)
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
Each directive is matched the way the real tool's parser matches it (its regex or string comparison).
|
|
166
|
+
|
|
167
|
+
- **Compiler / types**: `@ts-ignore` `@ts-expect-error` `@ts-nocheck` `@ts-check` / `/// <reference>` / `@ts-strict-ignore`, `@ts-strict` (typescript-strict-plugin) / `@deno-types=`, `@ts-types=`, `@ts-self-types=` (Deno)
|
|
168
|
+
- **Linters**: the `eslint-disable` family, `eslint-env`, `/* global */`, `/* exported */` / the `oxlint-disable` family / the `biome-ignore` family, `rome-ignore` / the `deno-lint-ignore` family / `@flow`, `@noflow`, the `$FlowFixMe` family, `flowlint` (Flow) / `tslint:`, `jshint`, `jscs:`, `jslint` (legacy)
|
|
169
|
+
- **Formatters**: `prettier-ignore`, the `@format`/`@prettier`/`@noformat`/`@noprettier` pragmas / `oxfmt-ignore` / `dprint-ignore`, `dprint-ignore-file` / `organize-imports-ignore` / `beautify ignore/preserve` (legacy)
|
|
170
|
+
- **Coverage / testing**: `istanbul ignore`, `c8 ignore`, `v8 ignore`, `node:coverage` / `@jest-environment(-options)`, `@vitest-environment(-options)`, `@module-tag` (Vitest 4) / `Stryker disable/restore` / `type-coverage:ignore-line/-next-line` / `ts-prune-ignore-next`
|
|
171
|
+
- **Bundlers / runtimes**: webpack and turbopack magic comments such as `webpackChunkName:` / `@vite-ignore` / `#__PURE__`, `@__NO_SIDE_EFFECTS__`, `@__INLINE__`, `@__KEY__`, `@__MANGLE_PROP__` (terser/rollup annotations) / `// @bun` (Bun) / `@refresh reset/skip/reload` (react-refresh / solid-refresh) / `million-ignore` / `nx-ignore-next-line` (Nx) / `@unocss-include/-ignore/-skip-start/-skip-end` / `@next-codemod-error/-ignore` (Next.js) / `/* GraphQL */`, `/* HTML */` tag comments / `//# sourceMappingURL=`, `//# sourceURL=` / `@jsx`-family pragmas
|
|
172
|
+
- **Security / static analysis**: `NOSONAR` (SonarQube) / `nosemgrep` (Semgrep) / `lgtm[...]`, `codeql[...]` (CodeQL) / `skipcq` (DeepSource) / `deepcode ignore` (Snyk Code) / `no-dd-sa`, `datadog-disable` (Datadog) / `gitleaks:allow` / `trufflehog:ignore` / `pragma: allowlist secret` (detect-secrets)
|
|
173
|
+
- **Spell checkers**: the `cspell:` family (including the `cSpell:`, `spell-checker:`, `spellchecker:` aliases), `LocalWords` / `codespell:ignore`
|
|
174
|
+
- **Editors / IDEs**: `#region`, `#endregion` / `noinspection`, `<editor-fold>`, `language=` (JetBrains) / `ReSharper disable/restore`
|
|
166
175
|
|
|
167
176
|
## Using it as a library
|
|
168
177
|
|
package/README.md
CHANGED
|
@@ -138,7 +138,7 @@ ts-comment-scanner --remove --remove-directives --remove-legal src
|
|
|
138
138
|
削除は AST のコメント範囲に基づいて行われるため、文字列やコードには影響しません。さらに:
|
|
139
139
|
|
|
140
140
|
- `@ts-expect-error` / `eslint-disable` などの指示子は、削除するとビルドやリントが壊れるため**デフォルトで保持**
|
|
141
|
-
- `/*! ... */` や `@license` / `@preserve` / `@copyright`
|
|
141
|
+
- `/*! ... */` や `@license` / `@preserve` / `@copyright`、`SPDX-License-Identifier:` / `SPDX-FileCopyrightText:` タグを含む法的コメントも**デフォルトで保持**
|
|
142
142
|
- ブロックコメント除去でトークンが結合してしまう位置には空白を挿入(`a/* x */b` → `a b`)
|
|
143
143
|
- コメントだけの行は行ごと削除、行末コメントは手前の空白ごと削除
|
|
144
144
|
- 削除後のソースを再スキャンして検証し、想定外の結果になる場合はファイルを変更せずエラー報告
|
|
@@ -162,7 +162,16 @@ ts-comment-scanner --fail-on-comment --diff a1b2c3..d4e5f6 src
|
|
|
162
162
|
|
|
163
163
|
### 検出できるディレクティブ(抜粋)
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
各ディレクティブは実ツールのパーサー実装(正規表現・文字列比較)に合わせて判定されます。
|
|
166
|
+
|
|
167
|
+
- **コンパイラ / 型**: `@ts-ignore` `@ts-expect-error` `@ts-nocheck` `@ts-check` / `/// <reference>` / `@ts-strict-ignore`・`@ts-strict`(typescript-strict-plugin) / `@deno-types=`・`@ts-types=`・`@ts-self-types=`(Deno)
|
|
168
|
+
- **リンター**: `eslint-disable` 系・`eslint-env`・`/* global */`・`/* exported */` / `oxlint-disable` 系 / `biome-ignore` 系・`rome-ignore` / `deno-lint-ignore` 系 / `@flow`・`@noflow`・`$FlowFixMe` 系・`flowlint` 系(Flow) / `tslint:`・`jshint`・`jscs:`・`jslint`(レガシー)
|
|
169
|
+
- **フォーマッタ**: `prettier-ignore`・`@format`/`@prettier`/`@noformat`/`@noprettier` pragma / `oxfmt-ignore` / `dprint-ignore`・`dprint-ignore-file` / `organize-imports-ignore` / `beautify ignore/preserve`(レガシー)
|
|
170
|
+
- **カバレッジ / テスト**: `istanbul ignore`・`c8 ignore`・`v8 ignore`・`node:coverage` / `@jest-environment(-options)`・`@vitest-environment(-options)`・`@module-tag`(Vitest 4) / `Stryker disable/restore` / `type-coverage:ignore-line/-next-line` / `ts-prune-ignore-next`
|
|
171
|
+
- **バンドラ / ランタイム**: `webpackChunkName:` などの webpack・turbopack マジックコメント / `@vite-ignore` / `#__PURE__`・`@__NO_SIDE_EFFECTS__`・`@__INLINE__`・`@__KEY__`・`@__MANGLE_PROP__`(terser/rollup 注釈) / `// @bun`(Bun) / `@refresh reset/skip/reload`(react-refresh / solid-refresh) / `million-ignore` / `nx-ignore-next-line`(Nx) / `@unocss-include/-ignore/-skip-start/-skip-end` / `@next-codemod-error/-ignore`(Next.js) / `/* GraphQL */`・`/* HTML */` タグコメント / `//# sourceMappingURL=`・`//# sourceURL=` / `@jsx` 系プラグマ
|
|
172
|
+
- **セキュリティ / 静的解析**: `NOSONAR`(SonarQube) / `nosemgrep`(Semgrep) / `lgtm[...]`・`codeql[...]`(CodeQL) / `skipcq`(DeepSource) / `deepcode ignore`(Snyk Code) / `no-dd-sa`・`datadog-disable`(Datadog) / `gitleaks:allow` / `trufflehog:ignore` / `pragma: allowlist secret`(detect-secrets)
|
|
173
|
+
- **スペルチェック**: `cspell:` 系(`cSpell:`・`spell-checker:`・`spellchecker:` 別名込み)・`LocalWords` / `codespell:ignore`
|
|
174
|
+
- **エディタ / IDE**: `#region`・`#endregion` / `noinspection`・`<editor-fold>`・`language=`(JetBrains) / `ReSharper disable/restore`
|
|
166
175
|
|
|
167
176
|
## ライブラリとして使う
|
|
168
177
|
|
package/dist/directives.d.ts
CHANGED
|
@@ -5,8 +5,10 @@ import type { CommentKind } from "./types.js";
|
|
|
5
5
|
*/
|
|
6
6
|
export declare function detectDirective(kind: CommentKind, text: string): string | undefined;
|
|
7
7
|
/**
|
|
8
|
-
* True for license/legal comments (`/*!`, `@license`, `@preserve`,
|
|
9
|
-
*
|
|
8
|
+
* True for license/legal comments (`/*!`, `@license`, `@preserve`,
|
|
9
|
+
* `@copyright`, and the machine-readable `SPDX-License-Identifier:` /
|
|
10
|
+
* `SPDX-FileCopyrightText:` tags) that build tools conventionally keep when
|
|
11
|
+
* stripping comments and that license scanners rely on.
|
|
10
12
|
*/
|
|
11
13
|
export declare function isLegalComment(text: string): boolean;
|
|
12
14
|
//# sourceMappingURL=directives.d.ts.map
|
package/dist/directives.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../src/directives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../src/directives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwT9C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4CnF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIpD"}
|
package/dist/directives.js
CHANGED
|
@@ -18,18 +18,65 @@ const RULES = [
|
|
|
18
18
|
// JSCS (legacy). Spacing after the colon is lenient (`jscs: enable` works),
|
|
19
19
|
// so the name is normalised to the compact form.
|
|
20
20
|
{ pattern: /^jscs:\s*(disable|enable|ignore)\b/, name: (match) => `jscs:${match[1]}`, joinLines: true },
|
|
21
|
+
// JSLint (legacy): the directive word must sit immediately after the
|
|
22
|
+
// comment marker with no space (`/*jslint devel*/` works, `/* jslint */`
|
|
23
|
+
// does not) and needs a body, so these match the raw text. The whole-line
|
|
24
|
+
// pragmas (`/*jslint-disable*/`, `//jslint-ignore-line`) are exact strings.
|
|
25
|
+
{ pattern: /^\/[/*](jslint|property)\s+\S/, rawText: true, name: (match) => match[1] ?? "jslint" },
|
|
26
|
+
{ pattern: /^\/\*jslint-(disable|enable)\*\/$/, rawText: true, name: (match) => `jslint-${match[1]}` },
|
|
27
|
+
{ pattern: /^\/\/jslint-(ignore-line|quiet)$/, rawText: true, name: (match) => `jslint-${match[1]}` },
|
|
21
28
|
// oxlint
|
|
22
29
|
{ pattern: /^oxlint-(?:disable|enable)(?:-next-line|-line)?\b/ },
|
|
23
30
|
// Biome
|
|
24
31
|
{ pattern: /^biome-ignore(?:-all|-start|-end)?\b/ },
|
|
32
|
+
// Rome (Biome's predecessor). Case-insensitive keyword with `-` or `_`,
|
|
33
|
+
// then known categories and a mandatory colon — without the colon Rome
|
|
34
|
+
// reported a parse diagnostic and the suppression stayed inert.
|
|
35
|
+
{
|
|
36
|
+
pattern: /^rome[-_]ignore\s*(?:(?:parse|format|lint)(?:\([^)]*\))?\s*)+:/i,
|
|
37
|
+
name: "rome-ignore",
|
|
38
|
+
anyLine: true,
|
|
39
|
+
},
|
|
25
40
|
// Deno
|
|
26
41
|
{ pattern: /^deno-(?:lint-ignore(?:-file)?|fmt-ignore(?:-file)?|coverage-ignore(?:-file|-start|-stop)?)\b/ },
|
|
42
|
+
// Deno type directives. deno_graph matches them case-insensitively at the
|
|
43
|
+
// comment start; `@deno-types` accepts a bare specifier, the newer names
|
|
44
|
+
// require quotes.
|
|
45
|
+
{ pattern: /^@deno-types\s*=\s*(?:"[^"\n]+"|'[^'\n]+'|\S+)/i, name: "@deno-types" },
|
|
46
|
+
{ pattern: /^@ts-types\s*=\s*(?:"[^"\n]+"|'[^'\n]+')/i, name: "@ts-types" },
|
|
47
|
+
{ pattern: /^@ts-self-types\s*=\s*(?:"[^"\n]+"|'[^'\n]+')/i, name: "@ts-self-types" },
|
|
27
48
|
// Formatter suppressions (prettier, and oxfmt which mirrors it). Both
|
|
28
49
|
// parsers compare the exact trimmed comment body, so the marker must be the
|
|
29
50
|
// whole comment (joinLines makes `$` span every line): hyphenated
|
|
30
51
|
// lookalikes (`oxfmt-ignore-more`) and prose stay ordinary.
|
|
31
52
|
{ pattern: /^prettier-ignore(?:-start|-end)?$/, joinLines: true },
|
|
32
53
|
{ pattern: /^oxfmt-ignore$/, joinLines: true },
|
|
54
|
+
// dprint. The file pragma is a starts-with check (trailing text allowed) on
|
|
55
|
+
// the file's leading comments, skipping only whitespace — a `/**` docblock
|
|
56
|
+
// star defeats it. The node pragma is a substring bounded by
|
|
57
|
+
// non-alphanumerics anywhere in the comment, so a reason may follow.
|
|
58
|
+
{ pattern: /^dprint-ignore-file/, notDocblock: true, name: "dprint-ignore-file" },
|
|
59
|
+
{
|
|
60
|
+
pattern: /(?:^|[^\p{L}\p{N}])dprint-ignore(?![\p{L}\p{N}])/u,
|
|
61
|
+
name: "dprint-ignore",
|
|
62
|
+
anyLine: true,
|
|
63
|
+
},
|
|
64
|
+
// Prettier pragma mode (--require-pragma / --check-ignore-pragma). Prettier
|
|
65
|
+
// reads them via jest-docblock: only the file's first block comment counts
|
|
66
|
+
// and the pragma has to open a line. The lookahead keeps distinct keys like
|
|
67
|
+
// `@prettier-plugin` ordinary, matching jest-docblock's `@(\S+)` parsing.
|
|
68
|
+
{ pattern: /^@(?:no)?(?:format|prettier)(?=\s|$)/, blockOnly: true, anyLine: true },
|
|
69
|
+
// prettier-plugin-organize-imports: a literal whole-file substring check,
|
|
70
|
+
// `//` and single space included, so it matches the raw comment text.
|
|
71
|
+
{ pattern: /\/\/ organize-imports-ignore/, rawText: true, name: "organize-imports-ignore" },
|
|
72
|
+
// js-beautify (legacy): exact-shape block comments with single spaces; only
|
|
73
|
+
// the ignore/preserve pairs have an effect.
|
|
74
|
+
{
|
|
75
|
+
pattern: /^\/\* beautify(?: (?:ignore|preserve):(?:start|end))+ \*\/$/,
|
|
76
|
+
rawText: true,
|
|
77
|
+
blockOnly: true,
|
|
78
|
+
name: "beautify",
|
|
79
|
+
},
|
|
33
80
|
// Coverage tools. The mode is part of the name so that consumers can tell
|
|
34
81
|
// next-statement pragmas (`next`, `if`, ...) from file/range ones (`file`,
|
|
35
82
|
// `start`, `stop`). The c8 CLI (v8-to-istanbul) and Node core only parse
|
|
@@ -45,18 +92,171 @@ const RULES = [
|
|
|
45
92
|
pattern: /^node:coverage\s+(disable|enable|ignore)\b/,
|
|
46
93
|
name: (match) => `node:coverage-${match[1]}`,
|
|
47
94
|
},
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
{
|
|
51
|
-
|
|
95
|
+
// type-coverage: substring match in any comment. There is no ignore-file
|
|
96
|
+
// comment — file-level ignores are a CLI option only.
|
|
97
|
+
{
|
|
98
|
+
pattern: /type-coverage:ignore-(next-line|line)/,
|
|
99
|
+
name: (match) => `type-coverage:ignore-${match[1]}`,
|
|
100
|
+
anyLine: true,
|
|
101
|
+
},
|
|
102
|
+
// StrykerJS mutation testing. The instrumenter runs
|
|
103
|
+
// /^\s?Stryker (disable|restore)( next-line)? <mutators>/ against the raw
|
|
104
|
+
// comment value: at most one space before `Stryker`, single literal spaces,
|
|
105
|
+
// and a mandatory mutator list (`all` or names) — hence the rawText match.
|
|
106
|
+
{
|
|
107
|
+
pattern: /^\/[/*]\s?Stryker (disable|restore)( next-line)? [a-zA-Z]/,
|
|
108
|
+
rawText: true,
|
|
109
|
+
name: (match) => `stryker-${match[1]}${match[2] === undefined ? "" : "-next-line"}`,
|
|
110
|
+
},
|
|
111
|
+
// ts-prune: substring of the closest leading comment above an export.
|
|
112
|
+
{ pattern: /ts-prune-ignore-next/, name: "ts-prune-ignore-next", anyLine: true },
|
|
113
|
+
// typescript-strict-plugin: token-equality scan over the whole file (the
|
|
114
|
+
// CLI splits comment lines on spaces, the IDE plugin uses a TODO scan).
|
|
115
|
+
{
|
|
116
|
+
pattern: /(?:^|\s)@ts-strict(-ignore)?(?=\s|$)/,
|
|
117
|
+
name: (match) => (match[1] === undefined ? "@ts-strict" : "@ts-strict-ignore"),
|
|
118
|
+
anyLine: true,
|
|
119
|
+
},
|
|
120
|
+
// Flow. The pragmas live in the file's leading docblock and are matched as
|
|
121
|
+
// whole words (text may surround them). Suppressions must open the comment
|
|
122
|
+
// and take an optional [error-code]; all four historical suppressors are
|
|
123
|
+
// recognised ($FlowIssue/$FlowIgnore stopped working in Flow 0.281 but
|
|
124
|
+
// still gate older setups). flowlint takes rule:severity pairs.
|
|
125
|
+
{
|
|
126
|
+
pattern: /(?:^|[\s*/])@(no)?flow(?=$|[\s*/])/,
|
|
127
|
+
name: (match) => (match[1] === undefined ? "@flow" : "@noflow"),
|
|
128
|
+
anyLine: true,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
pattern: /^\$Flow(FixMe|ExpectedError|Issue|Ignore)(?:\[[a-z-]+\])?(?![\w-])/,
|
|
132
|
+
name: (match) => `$Flow${match[1]}`,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
pattern: /^flowlint(-line|-next-line)?\s+[a-z][a-z-]*\s*:\s*(?:off|warn|error)/,
|
|
136
|
+
name: (match) => `flowlint${match[1] ?? ""}`,
|
|
137
|
+
joinLines: true,
|
|
138
|
+
},
|
|
139
|
+
// Bundlers. webpack's gate regex requires the colon to follow the key
|
|
140
|
+
// immediately and evaluates the body as an object literal, which JSDoc
|
|
141
|
+
// stars break — turbopack magic comments mirror the same `key: value` form.
|
|
142
|
+
{ pattern: /^webpack[A-Z][A-Za-z]+:/, name: "webpack-magic-comment", notDocblock: true },
|
|
143
|
+
{ pattern: /^turbopack[A-Z][A-Za-z]+:/, name: "turbopack-magic-comment", notDocblock: true },
|
|
52
144
|
{ pattern: /^@vite-ignore\b/ },
|
|
53
|
-
|
|
145
|
+
// Terser/Rollup annotations: a bare substring search over any comment kind,
|
|
146
|
+
// so leading or trailing words keep the annotation active.
|
|
147
|
+
{ pattern: /[#@]__(?:PURE|NO_SIDE_EFFECTS|INLINE|NOINLINE|KEY|MANGLE_PROP)__/, anyLine: true },
|
|
148
|
+
// Million.js: substring of the leading comments of a component.
|
|
149
|
+
{ pattern: /million-ignore/, name: "million-ignore", anyLine: true },
|
|
150
|
+
{
|
|
151
|
+
pattern: /^@million (jsx-)?skip$/,
|
|
152
|
+
joinLines: true,
|
|
153
|
+
name: (match) => (match[1] === undefined ? "@million-skip" : "@million-jsx-skip"),
|
|
154
|
+
},
|
|
155
|
+
// Nx project graph: substring; the comment has to end on the line right
|
|
156
|
+
// above the import it hides.
|
|
157
|
+
{ pattern: /nx-ignore-next-line/, name: "nx-ignore-next-line", anyLine: true },
|
|
158
|
+
// UnoCSS: include/ignore are raw whole-file substring checks; the skip
|
|
159
|
+
// markers must be their own comment.
|
|
160
|
+
{ pattern: /@unocss-(include|ignore)/, name: (match) => `@unocss-${match[1]}`, anyLine: true },
|
|
161
|
+
{ pattern: /^@unocss-skip-(start|end)\b/, name: (match) => `@unocss-skip-${match[1]}` },
|
|
162
|
+
// Next.js codemod markers: `next build` fails while an unresolved
|
|
163
|
+
// @next-codemod-error comment is attached to the call.
|
|
164
|
+
{ pattern: /@next-codemod-(error|ignore)/, name: (match) => `@next-codemod-${match[1]}`, anyLine: true },
|
|
165
|
+
// Bun: the runtime treats a file starting with the literal bytes `// @bun`
|
|
166
|
+
// (optionally followed by flags like `@bytecode`) as already transpiled.
|
|
167
|
+
{ pattern: /^\/\/ @bun/, rawText: true, lineOnly: true, name: "@bun" },
|
|
168
|
+
// React Fast Refresh / solid-refresh. react-refresh looks for the
|
|
169
|
+
// substring `@refresh reset` in any comment; solid-refresh requires its
|
|
170
|
+
// pragma to be the entire comment body.
|
|
171
|
+
{ pattern: /^@refresh (skip|reload)$/, joinLines: true, name: (match) => `@refresh-${match[1]}` },
|
|
172
|
+
{ pattern: /@refresh reset/, name: "@refresh-reset", anyLine: true },
|
|
173
|
+
// Embedded-language tag comments: prettier formats the following template
|
|
174
|
+
// literal when the whole comment is `GraphQL` (graphql-tag-pluck matches it
|
|
175
|
+
// case-insensitively) or `HTML` (prettier's exact ` HTML ` value).
|
|
176
|
+
{ pattern: /^graphql$/i, joinLines: true, name: "GraphQL" },
|
|
177
|
+
{ pattern: /^\/\* HTML \*\/$/, rawText: true, blockOnly: true, name: "HTML" },
|
|
54
178
|
// Source maps (`//# sourceMappingURL=`, legacy `//@`, and the block form)
|
|
55
179
|
{ pattern: /^[#@]\s*(source(?:Mapping)?URL)=/, name: (match) => match[1] ?? "sourceMappingURL" },
|
|
56
180
|
// JSX pragmas (docblock pragmas: block comments only, honoured on any line)
|
|
57
181
|
{ pattern: /^@jsx(?:Runtime|ImportSource|Frag)?\b/, blockOnly: true, anyLine: true },
|
|
58
|
-
// Test runners
|
|
59
|
-
|
|
182
|
+
// Test runners. Jest reads these from the file's leading docblock, but
|
|
183
|
+
// Vitest (which also honours the @jest- spellings) matches the pragma with
|
|
184
|
+
// a bare regex over the whole file, so any comment kind and position can be
|
|
185
|
+
// active; both regexes require a value after the tag.
|
|
186
|
+
{
|
|
187
|
+
pattern: /@((?:jest|vitest)-environment)\s+[\w-]/,
|
|
188
|
+
name: (match) => `@${match[1]}`,
|
|
189
|
+
anyLine: true,
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
pattern: /@((?:jest|vitest)-environment-options)\s+\S/,
|
|
193
|
+
name: (match) => `@${match[1]}`,
|
|
194
|
+
anyLine: true,
|
|
195
|
+
},
|
|
196
|
+
// Vitest module tags. Vitest requires the tag to sit right after a `//` or
|
|
197
|
+
// `*` marker, which is what a content-line start means here.
|
|
198
|
+
{ pattern: /^@module-tag\s+[\w/-]/, name: "@module-tag", anyLine: true },
|
|
199
|
+
// SonarQube/SonarCloud: the trimmed comment (JSDoc star stripped) has to
|
|
200
|
+
// START with NOSONAR, case-insensitively; any suffix keeps it active.
|
|
201
|
+
{ pattern: /^NOSONAR/i, name: "NOSONAR" },
|
|
202
|
+
// Semgrep: ` nosemgrep`/` nosem` (case-insensitive) on the finding line or
|
|
203
|
+
// standalone above it, with optional `:`/`=` rule ids. Semgrep itself needs
|
|
204
|
+
// no trailing boundary; the lookahead just keeps words like `nosemantic`
|
|
205
|
+
// ordinary.
|
|
206
|
+
{ pattern: /(?:^|\s)nosem(?:grep)?(?![\w-])/i, name: "nosemgrep", anyLine: true },
|
|
207
|
+
// CodeQL / LGTM alert suppressions: single-line comments only. `lgtm[...]`
|
|
208
|
+
// matches anywhere in the comment; bare `lgtm` only at the start or after a
|
|
209
|
+
// `;`; `codeql[...]` requires the bracketed query id.
|
|
210
|
+
{ pattern: /\blgtm\s*\[[^\]]*\]/i, singleLine: true, name: "lgtm" },
|
|
211
|
+
{ pattern: /(?:^|;)\s*lgtm(?!\w)(?!\s*\[)/i, singleLine: true, name: "lgtm" },
|
|
212
|
+
{ pattern: /\bcodeql\s*\[[^\]]*\]/i, singleLine: true, name: "codeql" },
|
|
213
|
+
// DeepSource: bare `skipcq` or `skipcq: CODE1, CODE2`, on the flagged line
|
|
214
|
+
// or standalone above it (it may trail other comment text).
|
|
215
|
+
{ pattern: /\bskipcq(?![\w-])/, name: "skipcq", anyLine: true },
|
|
216
|
+
// Snyk Code (DeepCode, legacy): `deepcode ignore RuleId: reason`, with a
|
|
217
|
+
// `file ` prefix for the file-wide form.
|
|
218
|
+
{ pattern: /^(?:file\s+)?deepcode\s+ignore\b/, name: "deepcode-ignore" },
|
|
219
|
+
// Datadog static analysis: the keyword must directly follow the comment
|
|
220
|
+
// opener (whitespace aside); a `/**` star defeats it. Applies to the next
|
|
221
|
+
// line, or the whole file from line 1.
|
|
222
|
+
{ pattern: /^(no-dd-sa|datadog-disable)/, notDocblock: true, name: (match) => match[1] ?? "no-dd-sa" },
|
|
223
|
+
// Secret scanners: raw substring checks on the finding line.
|
|
224
|
+
{ pattern: /gitleaks:allow/, name: "gitleaks:allow", anyLine: true },
|
|
225
|
+
{ pattern: /trufflehog:ignore/, name: "trufflehog:ignore", anyLine: true },
|
|
226
|
+
// detect-secrets: `pragma: allowlist secret` (legacy `whitelist`) on the
|
|
227
|
+
// finding line, or the nextline form standing alone above it.
|
|
228
|
+
{ pattern: /^pragma: ?allowlist[ -]nextline[ -]secret/, name: "pragma-allowlist-nextline-secret" },
|
|
229
|
+
{ pattern: /^pragma: ?(?:allow|white)list[ -]secret/, name: "pragma-allowlist-secret" },
|
|
230
|
+
// cspell in-document directives: `\b(?:spell-?checker|c?spell)::?` (yes,
|
|
231
|
+
// bare `spell:` counts) anywhere in the text, case-insensitive, followed by
|
|
232
|
+
// one of the known directive verbs. Names are normalised to `cspell:<verb>`.
|
|
233
|
+
{
|
|
234
|
+
pattern: /\b(?:c?spell|spell-?checker)::?\s*(disable(?:-line|-next(?:-line)?)?|enable|ignore(?:-?words?)?|words?|(?:flag|forbid)(?:-?words?)?|ignore_?reg_?exp|include_?reg_?exp|dictionar(?:y|ies)|locale?|language|(?:enable|disable)(?:allow)?compoundwords|(?:enable|disable)casesensitive)\b(?!-)/i,
|
|
235
|
+
name: (match) => `cspell:${(match[1] ?? "").toLowerCase()}`,
|
|
236
|
+
anyLine: true,
|
|
237
|
+
},
|
|
238
|
+
// cspell's legacy emacs-style word list (case-sensitive, colon optional).
|
|
239
|
+
{ pattern: /\bLocalWords(?::|\s+\S)/, name: "LocalWords", anyLine: true },
|
|
240
|
+
// codespell: the tag must follow a punctuation character (the comment
|
|
241
|
+
// marker itself at line starts) with at most one space between.
|
|
242
|
+
{
|
|
243
|
+
pattern: /(?:^|[^\w\s]\s?)codespell:ignore(-next-line)?(?![\w-])/,
|
|
244
|
+
name: (match) => `codespell:ignore${match[1] ?? ""}`,
|
|
245
|
+
anyLine: true,
|
|
246
|
+
},
|
|
247
|
+
// JetBrains IDEs. `noinspection` suppressions are line comments in JS/TS
|
|
248
|
+
// and take comma-separated inspection ids; editor-fold markers are
|
|
249
|
+
// substring checks; a `language=` comment injects a language into the
|
|
250
|
+
// literal that follows.
|
|
251
|
+
{ pattern: /^noinspection\s+[A-Za-z0-9_.-]+/, lineOnly: true, name: "noinspection" },
|
|
252
|
+
{
|
|
253
|
+
pattern: /<(\/?)editor-fold/,
|
|
254
|
+
name: (match) => (match[1] === "/" ? "editor-fold-end" : "editor-fold"),
|
|
255
|
+
anyLine: true,
|
|
256
|
+
},
|
|
257
|
+
{ pattern: /^language=\S/, name: "language-injection" },
|
|
258
|
+
// ReSharper/Rider suppressions (`ReSharper disable once RuleName`, ...).
|
|
259
|
+
{ pattern: /^ReSharper (disable|restore)\b/, lineOnly: true, name: (match) => `resharper-${match[1]}` },
|
|
60
260
|
// Editor folding
|
|
61
261
|
{ pattern: /^#(?:region|endregion)\b/ },
|
|
62
262
|
];
|
|
@@ -101,7 +301,19 @@ export function detectDirective(kind, text) {
|
|
|
101
301
|
for (const rule of RULES) {
|
|
102
302
|
if (rule.blockOnly === true && kind !== "block")
|
|
103
303
|
continue;
|
|
104
|
-
|
|
304
|
+
if (rule.lineOnly === true && kind !== "line")
|
|
305
|
+
continue;
|
|
306
|
+
if (rule.singleLine === true && LINE_BREAK.test(text))
|
|
307
|
+
continue;
|
|
308
|
+
if (rule.notDocblock === true && kind === "block" && text.startsWith("/**"))
|
|
309
|
+
continue;
|
|
310
|
+
const candidates = rule.rawText === true
|
|
311
|
+
? [text]
|
|
312
|
+
: rule.anyLine === true
|
|
313
|
+
? lines
|
|
314
|
+
: rule.joinLines === true
|
|
315
|
+
? [lines.join(" ")]
|
|
316
|
+
: lines.slice(0, 1);
|
|
105
317
|
for (const line of candidates) {
|
|
106
318
|
const match = rule.pattern.exec(line);
|
|
107
319
|
if (!match)
|
|
@@ -116,12 +328,16 @@ export function detectDirective(kind, text) {
|
|
|
116
328
|
return undefined;
|
|
117
329
|
}
|
|
118
330
|
/**
|
|
119
|
-
* True for license/legal comments (`/*!`, `@license`, `@preserve`,
|
|
120
|
-
*
|
|
331
|
+
* True for license/legal comments (`/*!`, `@license`, `@preserve`,
|
|
332
|
+
* `@copyright`, and the machine-readable `SPDX-License-Identifier:` /
|
|
333
|
+
* `SPDX-FileCopyrightText:` tags) that build tools conventionally keep when
|
|
334
|
+
* stripping comments and that license scanners rely on.
|
|
121
335
|
*/
|
|
122
336
|
export function isLegalComment(text) {
|
|
123
337
|
if (text.startsWith("/*!") || text.startsWith("//!"))
|
|
124
338
|
return true;
|
|
339
|
+
if (/\bSPDX-(?:License-Identifier|FileCopyrightText):/i.test(text))
|
|
340
|
+
return true;
|
|
125
341
|
return /@(?:license|preserve|copyright)\b/i.test(text);
|
|
126
342
|
}
|
|
127
343
|
// Every ECMAScript line terminator, the way the scanner breaks lines: CRLF as
|
package/dist/directives.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../src/directives.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../src/directives.ts"],"names":[],"mappings":"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"}
|
package/dist/remove.js
CHANGED
|
@@ -59,9 +59,10 @@ function shieldNextLineDirectives(source, removed, kept, skipped) {
|
|
|
59
59
|
const shieldedLines = new Set();
|
|
60
60
|
for (const comment of [...kept, ...skipped]) {
|
|
61
61
|
if (comment.directive !== undefined && isNextLineDirective(comment.directive)) {
|
|
62
|
-
// A trailing formatter suppression (`a = [1]; // oxfmt-ignore
|
|
63
|
-
// its own line, so it shields nothing
|
|
64
|
-
|
|
62
|
+
// A trailing formatter or scanner suppression (`a = [1]; // oxfmt-ignore`,
|
|
63
|
+
// `secret(); // nosemgrep`) targets its own line, so it shields nothing
|
|
64
|
+
// below it.
|
|
65
|
+
if (TRAILING_TARGETS_OWN_LINE.has(comment.directive) && !occupiesWholeLines(source, comment)) {
|
|
65
66
|
continue;
|
|
66
67
|
}
|
|
67
68
|
// Counted pragmas like `c8 ignore next 3` cover several lines.
|
|
@@ -86,10 +87,19 @@ function shieldNextLineDirectives(source, removed, kept, skipped) {
|
|
|
86
87
|
}
|
|
87
88
|
return stillRemoved;
|
|
88
89
|
}
|
|
89
|
-
//
|
|
90
|
-
// their own line
|
|
91
|
-
// next
|
|
92
|
-
|
|
90
|
+
// These suppressions only apply to the following node/line when they stand on
|
|
91
|
+
// their own line — trailing after code they target (at most) their own line.
|
|
92
|
+
// Other next-line directives (`@ts-ignore`, `no-dd-sa`, ...) target the next
|
|
93
|
+
// line even when they trail code.
|
|
94
|
+
const TRAILING_TARGETS_OWN_LINE = new Set([
|
|
95
|
+
"prettier-ignore",
|
|
96
|
+
"oxfmt-ignore",
|
|
97
|
+
"dprint-ignore",
|
|
98
|
+
"lgtm",
|
|
99
|
+
"codeql",
|
|
100
|
+
"skipcq",
|
|
101
|
+
"nosemgrep",
|
|
102
|
+
]);
|
|
93
103
|
// File- and range-scoped pragmas (`c8 ignore start`, `istanbul ignore file`,
|
|
94
104
|
// ...) do not target the following line, so they never shield it.
|
|
95
105
|
function isNextLineDirective(name) {
|
|
@@ -103,6 +113,8 @@ function isNextLineDirective(name) {
|
|
|
103
113
|
"deno-coverage-ignore",
|
|
104
114
|
"prettier-ignore",
|
|
105
115
|
"oxfmt-ignore",
|
|
116
|
+
"dprint-ignore",
|
|
117
|
+
"rome-ignore",
|
|
106
118
|
"istanbul-ignore",
|
|
107
119
|
"istanbul-ignore-next",
|
|
108
120
|
"istanbul-ignore-if",
|
|
@@ -116,6 +128,34 @@ function isNextLineDirective(name) {
|
|
|
116
128
|
"v8-ignore-if",
|
|
117
129
|
"v8-ignore-else",
|
|
118
130
|
"node:coverage-ignore",
|
|
131
|
+
// Directives that hang off the node or line directly below them: a
|
|
132
|
+
// whole-line comment between them and their target would change what
|
|
133
|
+
// they apply to, so the line below stays shielded.
|
|
134
|
+
"ts-prune-ignore-next",
|
|
135
|
+
"million-ignore",
|
|
136
|
+
"@million-skip",
|
|
137
|
+
"@million-jsx-skip",
|
|
138
|
+
"@deno-types",
|
|
139
|
+
"@ts-types",
|
|
140
|
+
"deepcode-ignore",
|
|
141
|
+
"skipcq",
|
|
142
|
+
"lgtm",
|
|
143
|
+
"codeql",
|
|
144
|
+
"nosemgrep",
|
|
145
|
+
"no-dd-sa",
|
|
146
|
+
"datadog-disable",
|
|
147
|
+
"noinspection",
|
|
148
|
+
"language-injection",
|
|
149
|
+
"@next-codemod-error",
|
|
150
|
+
"@next-codemod-ignore",
|
|
151
|
+
"$FlowFixMe",
|
|
152
|
+
"$FlowExpectedError",
|
|
153
|
+
"$FlowIssue",
|
|
154
|
+
"$FlowIgnore",
|
|
155
|
+
"pragma-allowlist-nextline-secret",
|
|
156
|
+
"cspell:disable-next",
|
|
157
|
+
"GraphQL",
|
|
158
|
+
"HTML",
|
|
119
159
|
].includes(name));
|
|
120
160
|
}
|
|
121
161
|
/** Number of following lines a next-line pragma covers (`ignore next 3` → 3). */
|
package/dist/remove.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../src/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA2B5C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,UAAyB,EAAE;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAE7C,IAAI,OAAO,GAAc,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB,EAAE,OAAsB;IAC3D,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACtF,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,MAAc,EAAE,OAAkB,EAAE,IAAe,EAAE,OAAkB;IACvG,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9E,wEAAwE;YACxE,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../src/remove.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAoBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,EAAE,CAgFjF"}
|
package/dist/scanner.js
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
import { detectDirective } from "./directives.js";
|
|
3
|
+
// dprint-ignore-file is deliberately absent: a stray one below the header no
|
|
4
|
+
// longer skips the file, but dprint's node pragma still matches inside it, so
|
|
5
|
+
// the comment stays an active `dprint-ignore` and must keep its tag.
|
|
6
|
+
const HEADER_ONLY_DIRECTIVES = new Set([
|
|
7
|
+
"@ts-nocheck",
|
|
8
|
+
"@ts-check",
|
|
9
|
+
"@format",
|
|
10
|
+
"@noformat",
|
|
11
|
+
"@prettier",
|
|
12
|
+
"@noprettier",
|
|
13
|
+
"@flow",
|
|
14
|
+
"@noflow",
|
|
15
|
+
"@bun",
|
|
16
|
+
"@ts-self-types",
|
|
17
|
+
"jslint",
|
|
18
|
+
"property",
|
|
19
|
+
]);
|
|
3
20
|
export function scanComments(source, options = {}) {
|
|
4
21
|
const jsx = options.jsx === true;
|
|
5
22
|
const fileName = jsx ? "module.tsx" : "module.ts";
|
|
@@ -37,17 +54,18 @@ export function scanComments(source, options = {}) {
|
|
|
37
54
|
};
|
|
38
55
|
visit(sourceFile);
|
|
39
56
|
const insideJsxText = (pos) => jsxTextSpans.some(([start, end]) => pos >= start && pos < end);
|
|
40
|
-
// File-wide pragmas (check pragmas, triple-slash directives,
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
57
|
+
// File-wide pragmas (check pragmas, triple-slash directives, prettier's
|
|
58
|
+
// docblock pragma mode, Flow/Bun/JSLint header pragmas, Deno's
|
|
59
|
+
// *-ignore-file and @ts-self-types forms) only count before the first
|
|
60
|
+
// token; anywhere later the tools treat them as ordinary text. Coverage
|
|
61
|
+
// file pragmas (`istanbul ignore file`, `c8/v8 ignore file`) are NOT
|
|
62
|
+
// gated: istanbul-lib-instrument and Vitest's v8 provider
|
|
63
|
+
// (ast-v8-to-istanbul) honour them on any comment in the file. Test
|
|
64
|
+
// environment pragmas are not gated either: Vitest matches them (including
|
|
65
|
+
// the @jest- spellings) with a regex over the whole file, and neither are
|
|
66
|
+
// @ts-strict pragmas (typescript-strict-plugin scans every line).
|
|
46
67
|
const firstTokenStart = sourceFile.getStart(sourceFile);
|
|
47
|
-
const isHeaderOnlyDirective = (directive) => directive
|
|
48
|
-
directive === "@ts-check" ||
|
|
49
|
-
directive === "@jest-environment" ||
|
|
50
|
-
directive === "@vitest-environment" ||
|
|
68
|
+
const isHeaderOnlyDirective = (directive) => HEADER_ONLY_DIRECTIVES.has(directive) ||
|
|
51
69
|
(directive.startsWith("deno-") && directive.endsWith("-ignore-file")) ||
|
|
52
70
|
directive.startsWith("triple-slash-");
|
|
53
71
|
const isActiveDirective = (directive, pos) => !isHeaderOnlyDirective(directive) || pos < firstTokenStart;
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAOlD,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,UAAuB,EAAE;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;IAClD,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAEnG,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,OAAO,GAAG,CAAC,KAA6C,EAAQ,EAAE;QACtE,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,yEAAyE;QACzE,gEAAgE;QAChE,mEAAmE;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACpF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,UAAU,CAAC,CAAC;IAElB,MAAM,aAAa,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;IAE/G,sEAAsE;IACtE,
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|