@cplieger/deadset-ts 8.0.0-dev.2 → 8.0.0-dev.20
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.md +3 -1
- package/THIRD_PARTY_NOTICES.md +27 -0
- package/dist/bin/mapper-connection.js +2 -1
- package/dist/bin/node-host.js +24 -5
- package/dist/src/alias-chain.js +2 -7
- package/dist/src/amd.js +81 -0
- package/dist/src/analysis.js +269 -432
- package/dist/src/augmentations.js +64 -3
- package/dist/src/automatic-types.js +10 -29
- package/dist/src/bindings.js +382 -0
- package/dist/src/calls.js +279 -43
- package/dist/src/commands/held.js +499 -0
- package/dist/src/commands/read.js +161 -0
- package/dist/src/commands/shell.js +169 -0
- package/dist/src/commands/tools.js +1847 -0
- package/dist/src/component-files.js +3 -2
- package/dist/src/component-layer.js +4 -2
- package/dist/src/config.js +6 -82
- package/dist/src/conformance-record.js +1 -1
- package/dist/src/consumers.js +10 -38
- package/dist/src/contextual-uses.js +57 -26
- package/dist/src/contract/config.generated.js +561 -0
- package/dist/src/contract/contract.generated.js +1369 -0
- package/dist/src/contract/report.generated.js +866 -0
- package/dist/src/dependencies.js +164 -121
- package/dist/src/destructuring.js +1 -19
- package/dist/src/edges.js +38 -122
- package/dist/src/element-access.js +181 -168
- package/dist/src/entries/build-scripts.js +222 -0
- package/dist/src/{configuration-files.js → entries/configuration-files.js} +52 -256
- package/dist/src/{convention-rows.js → entries/convention-rows.js} +170 -30
- package/dist/src/entries/conventions.js +740 -0
- package/dist/src/{html-entries.js → entries/html-entries.js} +12 -42
- package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +5 -28
- package/dist/src/entries/run-directories.js +77 -0
- package/dist/src/entries/sources.js +144 -0
- package/dist/src/entries/static-module.js +670 -0
- package/dist/src/entries/test-runners.js +650 -0
- package/dist/src/entries/workflow-steps.js +345 -0
- package/dist/src/enum-group.js +3 -10
- package/dist/src/erased-stores.js +4 -6
- package/dist/src/exempt-classes.js +1 -63
- package/dist/src/exempt.js +21 -66
- package/dist/src/exposure.js +400 -0
- package/dist/src/extensions.js +37 -0
- package/dist/src/facts.js +38 -0
- package/dist/src/failure.js +36 -0
- package/dist/src/file-facts.js +3 -26
- package/dist/src/findings/completion.js +109 -56
- package/dist/src/findings/dependencies-and-module-machinery.js +4 -5
- package/dist/src/findings/emitters.js +27 -41
- package/dist/src/{implementations.js → findings/implementations.js} +3 -3
- package/dist/src/{in-operands.js → findings/in-operands.js} +3 -2
- package/dist/src/findings/interfaces.js +4 -5
- package/dist/src/findings/intra-function.js +16 -13
- package/dist/src/findings/non-code-artifacts.js +17 -12
- package/dist/src/findings/reads-and-writes.js +86 -27
- package/dist/src/findings/self-check.js +44 -30
- package/dist/src/findings/unused-declarations.js +29 -45
- package/dist/src/findings/visibility-narrowing.js +23 -31
- package/dist/src/findings-pass.js +13 -21
- package/dist/src/framework-lifecycle.js +46 -19
- package/dist/src/fs/document.js +52 -0
- package/dist/src/fs/manifest.js +67 -0
- package/dist/src/fs/tree.js +88 -0
- package/dist/src/generated-file.js +174 -28
- package/dist/src/git-ignore.js +39 -26
- package/dist/src/import-bindings.js +73 -28
- package/dist/src/index/sites.js +557 -0
- package/dist/src/index.js +2 -2
- package/dist/src/indexed-access.js +523 -478
- package/dist/src/injection-container.js +2 -2
- package/dist/src/interface-satisfaction.js +1 -1
- package/dist/src/intra-function-parts.js +63 -43
- package/dist/src/inventory/commonjs.js +507 -0
- package/dist/src/inventory/enumerate.js +167 -0
- package/dist/src/inventory/syntax.js +236 -0
- package/dist/src/inventory.js +323 -724
- package/dist/src/javascript-file.js +48 -0
- package/dist/src/json-document.js +198 -67
- package/dist/src/keyof-comparisons.js +126 -107
- package/dist/src/kinds.js +3 -366
- package/dist/src/{components.js → liveness/components.js} +2 -3
- package/dist/src/{graph.js → liveness/graph.js} +52 -28
- package/dist/src/liveness/matrix.js +99 -0
- package/dist/src/liveness/sweep.js +558 -0
- package/dist/src/load/classify.js +289 -0
- package/dist/src/load/diagnostics.js +87 -0
- package/dist/src/load/discover.js +285 -0
- package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
- package/dist/src/load/expected-module.js +136 -0
- package/dist/src/load/load.js +27 -0
- package/dist/src/load/module-lookup.js +37 -0
- package/dist/src/load/package-scope.js +56 -0
- package/dist/src/load/plan.js +313 -0
- package/dist/src/load/specifiers.js +113 -0
- package/dist/src/load/synthesize.js +152 -0
- package/dist/src/load/test-globals.js +207 -0
- package/dist/src/load/test-joins.js +82 -0
- package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
- package/dist/src/{workspace-programs.js → load/workspace-programs.js} +89 -66
- package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +24 -66
- package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
- package/dist/src/{workspace.js → load/workspace.js} +62 -124
- package/dist/src/module-declarations.js +70 -85
- package/dist/src/overrides.js +134 -112
- package/dist/src/partial.js +2 -1
- package/dist/src/paths.js +82 -16
- package/dist/src/platform-calls.js +78 -0
- package/dist/src/platform-symbols.js +134 -0
- package/dist/src/position.js +43 -1
- package/dist/src/print.js +11 -79
- package/dist/src/product.js +13 -0
- package/dist/src/query.js +47 -0
- package/dist/src/ref.js +12 -20
- package/dist/src/references/read-rule.js +1 -0
- package/dist/src/references/read-rules.js +48 -0
- package/dist/src/references/sink.js +237 -0
- package/dist/src/references/sources.js +450 -0
- package/dist/src/references.js +117 -1074
- package/dist/src/report-schema.js +51 -0
- package/dist/src/report.js +57 -41
- package/dist/src/reporters/annotations.js +15 -8
- package/dist/src/reporters/sarif.js +16 -10
- package/dist/src/reporters/template.js +4 -19
- package/dist/src/resolve.js +246 -730
- package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +22 -24
- package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +6 -15
- package/dist/src/roots/manifest.js +216 -0
- package/dist/src/roots/published-reach.js +412 -0
- package/dist/src/roots/root-set.js +487 -0
- package/dist/src/roots/unseen-loads.js +236 -0
- package/dist/src/run.js +66 -77
- package/dist/src/schema.js +320 -343
- package/dist/src/scope.js +38 -115
- package/dist/src/serialization-contract.js +601 -22
- package/dist/src/session.js +37 -29
- package/dist/src/source-files.js +6 -10
- package/dist/src/stores.js +4 -2
- package/dist/src/suppress-file.js +25 -28
- package/dist/src/suppress-inline.js +36 -83
- package/dist/src/suppress.js +50 -71
- package/dist/src/symbol-keys.js +92 -88
- package/dist/src/template-field.js +9 -19
- package/dist/src/tests/file-class.js +76 -0
- package/dist/src/{outside-tests.js → tests/outside.js} +7 -7
- package/dist/src/{test-support.js → tests/support.js} +5 -12
- package/dist/src/text/compare.js +26 -0
- package/dist/src/text/glob.js +194 -0
- package/dist/src/text/named-files.js +298 -0
- package/dist/src/text/yaml.js +684 -0
- package/dist/src/type-errors.js +11 -232
- package/dist/src/type-parameter-reads.js +178 -139
- package/dist/src/unimplemented-callees.js +262 -242
- package/dist/src/unwrap.js +23 -0
- package/dist/src/usage.js +10 -0
- package/dist/src/vendor/unbash/ansi-c.js +132 -0
- package/dist/src/vendor/unbash/arithmetic-parts.js +37 -0
- package/dist/src/vendor/unbash/arithmetic.js +591 -0
- package/dist/src/vendor/unbash/assignment.js +131 -0
- package/dist/src/vendor/unbash/chars.js +48 -0
- package/dist/src/vendor/unbash/command.js +41 -0
- package/dist/src/vendor/unbash/expansion.js +80 -0
- package/dist/src/vendor/unbash/glob.js +268 -0
- package/dist/src/vendor/unbash/heredoc.js +27 -0
- package/dist/src/vendor/unbash/internal-types.js +1 -0
- package/dist/src/vendor/unbash/lexer.js +4274 -0
- package/dist/src/vendor/unbash/limits.js +3 -0
- package/dist/src/vendor/unbash/parser.js +1366 -0
- package/dist/src/vendor/unbash/parts.js +57 -0
- package/dist/src/vendor/unbash/substitution-context.js +8 -0
- package/dist/src/vendor/unbash/traversal.js +212 -0
- package/dist/src/vendor/unbash/types.js +1 -0
- package/dist/src/vendor/unbash/word-value.js +61 -0
- package/dist/src/vendor/unbash/word.js +40 -0
- package/dist/src/verbs/analyze.js +194 -127
- package/dist/src/verbs/describe.js +13 -18
- package/dist/src/verbs/explain.js +85 -139
- package/dist/src/verbs/print-config.js +2 -1
- package/dist/src/verbs/print-projects.js +6 -4
- package/dist/src/verbs/print-retained.js +7 -5
- package/dist/src/verbs/print-roots.js +4 -2
- package/dist/src/verbs/verb.js +1 -5
- package/dist/src/verbs/version.js +14 -3
- package/jsr.json +2 -1
- package/package.json +14 -8
- package/src/alias-chain.ts +2 -9
- package/src/amd.ts +130 -0
- package/src/analysis.ts +424 -650
- package/src/augmentations.ts +93 -4
- package/src/automatic-types.ts +12 -30
- package/src/bindings.ts +460 -0
- package/src/calls.ts +338 -46
- package/src/commands/held.ts +632 -0
- package/src/commands/read.ts +242 -0
- package/src/commands/shell.ts +228 -0
- package/src/commands/tools.ts +2382 -0
- package/src/component-files.ts +4 -2
- package/src/component-layer.ts +4 -2
- package/src/config.ts +31 -302
- package/src/conformance-record.ts +1 -1
- package/src/consumers.ts +16 -66
- package/src/contextual-uses.ts +66 -34
- package/src/contract/config.generated.ts +821 -0
- package/src/contract/contract.generated.ts +1452 -0
- package/src/contract/report.generated.ts +1241 -0
- package/src/dependencies.ts +222 -127
- package/src/destructuring.ts +1 -31
- package/src/edges.ts +41 -140
- package/src/element-access.ts +190 -187
- package/src/entries/build-scripts.ts +292 -0
- package/src/{configuration-files.ts → entries/configuration-files.ts} +68 -278
- package/src/{convention-rows.ts → entries/convention-rows.ts} +227 -31
- package/src/{conventions.ts → entries/conventions.ts} +367 -583
- package/src/{html-entries.ts → entries/html-entries.ts} +22 -48
- package/src/{mdx-entries.ts → entries/mdx-entries.ts} +7 -30
- package/src/entries/run-directories.ts +108 -0
- package/src/entries/sources.ts +266 -0
- package/src/entries/static-module.ts +858 -0
- package/src/entries/test-runners.ts +835 -0
- package/src/entries/workflow-steps.ts +432 -0
- package/src/enum-group.ts +2 -11
- package/src/erased-stores.ts +3 -7
- package/src/exempt-classes.ts +1 -75
- package/src/exempt.ts +70 -98
- package/src/exposure.ts +492 -0
- package/src/extensions.ts +45 -0
- package/src/facts.ts +46 -0
- package/src/failure.ts +63 -0
- package/src/file-facts.ts +15 -25
- package/src/finding.ts +10 -10
- package/src/findings/boundary.ts +11 -0
- package/src/findings/completion.ts +133 -64
- package/src/findings/dependencies-and-module-machinery.ts +4 -7
- package/src/findings/emitter.ts +9 -10
- package/src/findings/emitters.ts +38 -52
- package/src/{implementations.ts → findings/implementations.ts} +4 -4
- package/src/{in-operands.ts → findings/in-operands.ts} +4 -3
- package/src/findings/interfaces.ts +7 -9
- package/src/findings/intra-function.ts +16 -14
- package/src/findings/non-code-artifacts.ts +24 -15
- package/src/findings/reads-and-writes.ts +118 -41
- package/src/findings/self-check.ts +51 -38
- package/src/findings/unused-declarations.ts +31 -49
- package/src/findings/visibility-narrowing.ts +36 -40
- package/src/findings-pass.ts +15 -31
- package/src/framework-lifecycle.ts +47 -19
- package/src/fs/document.ts +70 -0
- package/src/fs/manifest.ts +96 -0
- package/src/fs/tree.ts +110 -0
- package/src/generated-file.ts +242 -35
- package/src/git-ignore.ts +50 -26
- package/src/host.ts +12 -5
- package/src/import-bindings.ts +98 -29
- package/src/index/sites.ts +781 -0
- package/src/index.ts +2 -2
- package/src/indexed-access.ts +570 -527
- package/src/injection-container.ts +2 -2
- package/src/interface-satisfaction.ts +2 -2
- package/src/intra-function-parts.ts +73 -44
- package/src/inventory/commonjs.ts +696 -0
- package/src/inventory/enumerate.ts +203 -0
- package/src/inventory/syntax.ts +311 -0
- package/src/inventory.ts +442 -895
- package/src/javascript-file.ts +54 -0
- package/src/json-document.ts +241 -76
- package/src/keyof-comparisons.ts +133 -122
- package/src/kinds.ts +5 -413
- package/src/{components.ts → liveness/components.ts} +4 -6
- package/src/{graph.ts → liveness/graph.ts} +100 -35
- package/src/liveness/matrix.ts +162 -0
- package/src/liveness/sweep.ts +855 -0
- package/src/load/classify.ts +433 -0
- package/src/load/diagnostics.ts +154 -0
- package/src/load/discover.ts +471 -0
- package/src/{emit-map.ts → load/emit-map.ts} +1 -1
- package/src/load/expected-module.ts +194 -0
- package/src/load/load.ts +73 -0
- package/src/load/module-lookup.ts +50 -0
- package/src/load/package-scope.ts +74 -0
- package/src/load/plan.ts +513 -0
- package/src/load/specifiers.ts +171 -0
- package/src/load/synthesize.ts +230 -0
- package/src/load/test-globals.ts +251 -0
- package/src/load/test-joins.ts +98 -0
- package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
- package/src/{workspace-programs.ts → load/workspace-programs.ts} +128 -85
- package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +41 -77
- package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
- package/src/{workspace.ts → load/workspace.ts} +90 -134
- package/src/module-declarations.ts +74 -98
- package/src/overrides.ts +162 -134
- package/src/partial.ts +3 -2
- package/src/paths.ts +92 -16
- package/src/platform-calls.ts +119 -0
- package/src/platform-symbols.ts +189 -0
- package/src/position.ts +44 -1
- package/src/print.ts +12 -92
- package/src/product.ts +18 -0
- package/src/query.ts +92 -0
- package/src/ref.ts +12 -20
- package/src/references/read-rule.ts +60 -0
- package/src/references/read-rules.ts +55 -0
- package/src/references/sink.ts +314 -0
- package/src/references/sources.ts +632 -0
- package/src/references.ts +187 -1450
- package/src/report-schema.ts +68 -0
- package/src/report.ts +103 -226
- package/src/reporters/annotations.ts +22 -11
- package/src/reporters/json.ts +1 -1
- package/src/reporters/reporter.ts +2 -4
- package/src/reporters/reporters.ts +1 -1
- package/src/reporters/sarif.ts +29 -16
- package/src/reporters/template.ts +4 -20
- package/src/reporters/text.ts +3 -3
- package/src/resolve.ts +284 -1115
- package/src/{configured-declarations.ts → roots/configured-declarations.ts} +27 -29
- package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +7 -16
- package/src/roots/manifest.ts +303 -0
- package/src/roots/published-reach.ts +486 -0
- package/src/{roots.ts → roots/root-set.ts} +286 -469
- package/src/roots/unseen-loads.ts +345 -0
- package/src/run.ts +75 -91
- package/src/schema.ts +391 -388
- package/src/scope.ts +46 -138
- package/src/serialization-contract.ts +769 -23
- package/src/session.ts +87 -55
- package/src/source-files.ts +6 -11
- package/src/stores.ts +15 -3
- package/src/suppress-file.ts +24 -33
- package/src/suppress-inline.ts +55 -91
- package/src/suppress.ts +78 -79
- package/src/symbol-keys.ts +104 -107
- package/src/template-field.ts +15 -25
- package/src/tests/file-class.ts +135 -0
- package/src/{outside-tests.ts → tests/outside.ts} +16 -10
- package/src/{test-support.ts → tests/support.ts} +15 -21
- package/src/text/compare.ts +27 -0
- package/src/text/glob.ts +210 -0
- package/src/text/named-files.ts +388 -0
- package/src/text/yaml.ts +747 -0
- package/src/type-errors.ts +18 -288
- package/src/type-parameter-reads.ts +187 -158
- package/src/unimplemented-callees.ts +297 -280
- package/src/unwrap.ts +34 -0
- package/src/usage.ts +10 -0
- package/src/vendor/unbash/LICENSE +15 -0
- package/src/vendor/unbash/VENDORED.md +16 -0
- package/src/vendor/unbash/ansi-c.ts +132 -0
- package/src/vendor/unbash/arithmetic-parts.ts +53 -0
- package/src/vendor/unbash/arithmetic.ts +641 -0
- package/src/vendor/unbash/assignment.ts +163 -0
- package/src/vendor/unbash/chars.ts +48 -0
- package/src/vendor/unbash/command.ts +47 -0
- package/src/vendor/unbash/expansion.ts +144 -0
- package/src/vendor/unbash/glob.ts +284 -0
- package/src/vendor/unbash/heredoc.ts +34 -0
- package/src/vendor/unbash/internal-types.ts +94 -0
- package/src/vendor/unbash/lexer.ts +4352 -0
- package/src/vendor/unbash/limits.ts +3 -0
- package/src/vendor/unbash/parser.ts +1612 -0
- package/src/vendor/unbash/parts.ts +96 -0
- package/src/vendor/unbash/substitution-context.ts +20 -0
- package/src/vendor/unbash/traversal.ts +182 -0
- package/src/vendor/unbash/types.ts +660 -0
- package/src/vendor/unbash/word-value.ts +64 -0
- package/src/vendor/unbash/word.ts +50 -0
- package/src/verbs/analyze.ts +255 -164
- package/src/verbs/describe.ts +19 -17
- package/src/verbs/explain.ts +93 -169
- package/src/verbs/print-config.ts +2 -1
- package/src/verbs/print-projects.ts +6 -4
- package/src/verbs/print-retained.ts +7 -5
- package/src/verbs/print-roots.ts +4 -2
- package/src/verbs/verb.ts +2 -8
- package/src/verbs/version.ts +15 -3
- package/dist/src/base-url.js +0 -18
- package/dist/src/conventions.js +0 -937
- package/dist/src/discover.js +0 -468
- package/dist/src/entry-points.js +0 -529
- package/dist/src/glob.js +0 -65
- package/dist/src/manifest.js +0 -165
- package/dist/src/matrix.js +0 -246
- package/dist/src/pnpm-workspace.js +0 -120
- package/dist/src/roots.js +0 -672
- package/dist/src/setup-failure.js +0 -23
- package/dist/src/sweep.js +0 -224
- package/dist/src/test-joins.js +0 -101
- package/dist/src/version.js +0 -7
- package/dist/src/workflow-steps.js +0 -185
- package/src/base-url.ts +0 -24
- package/src/discover.ts +0 -653
- package/src/entry-points.ts +0 -687
- package/src/glob.ts +0 -67
- package/src/manifest.ts +0 -234
- package/src/matrix.ts +0 -423
- package/src/pnpm-workspace.ts +0 -135
- package/src/setup-failure.ts +0 -39
- package/src/sweep.ts +0 -347
- package/src/test-joins.ts +0 -120
- package/src/version.ts +0 -7
- package/src/workflow-steps.ts +0 -216
package/dist/src/git-ignore.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Which files
|
|
2
|
+
* Which files git ignores below a tree's root, read as git reads its ignore files:
|
|
3
3
|
* https://git-scm.com/docs/gitignore#_pattern_format
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
5
|
+
import { ancestors, dirnamePath, joinPath, relativePath } from "./paths.js";
|
|
6
|
+
import { message } from "./product.js";
|
|
7
|
+
import { gitignoreExpression } from "./text/glob.js";
|
|
8
|
+
import { repositoryOf } from "./fs/tree.js";
|
|
9
|
+
/** The rules one ignore file's text writes, in order. */
|
|
8
10
|
function rulesOf(text) {
|
|
9
11
|
const rules = [];
|
|
10
12
|
for (const raw of text.split(/\r?\n/u)) {
|
|
@@ -13,7 +15,7 @@ function rulesOf(text) {
|
|
|
13
15
|
continue;
|
|
14
16
|
}
|
|
15
17
|
const negated = line.startsWith("!");
|
|
16
|
-
line = negated
|
|
18
|
+
line = negated ? line.slice(1) : line;
|
|
17
19
|
const directoryOnly = line.endsWith("/");
|
|
18
20
|
line = line.replace(/\/+$/u, "");
|
|
19
21
|
if (line === "") {
|
|
@@ -26,43 +28,54 @@ function rulesOf(text) {
|
|
|
26
28
|
rules.push({
|
|
27
29
|
negated,
|
|
28
30
|
directoryOnly,
|
|
29
|
-
expression:
|
|
31
|
+
expression: gitignoreExpression(anchored ? pattern : `**/${pattern}`),
|
|
30
32
|
});
|
|
31
33
|
}
|
|
32
34
|
return rules;
|
|
33
35
|
}
|
|
36
|
+
function rulesIn(host, path, unread) {
|
|
37
|
+
try {
|
|
38
|
+
return rulesOf(host.readFile(path));
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (host.kindOf(path) !== "absent") {
|
|
42
|
+
unread(path, message(error));
|
|
43
|
+
}
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
34
47
|
/**
|
|
35
|
-
* Whether
|
|
36
|
-
*
|
|
37
|
-
*
|
|
48
|
+
* Whether git ignores one absolute path below `root`: by the repository's `info/exclude`, then
|
|
49
|
+
* the `.gitignore` files from its root down to the path's directory, a later pattern overriding
|
|
50
|
+
* an earlier one, though a file below an ignored directory stays ignored, as git cannot re-include
|
|
51
|
+
* it. A path outside `root` is not ignored. With no repository, the files at and below `root` are
|
|
52
|
+
* read; with one, the directories above `root` give patterns but are not tested. An unreadable
|
|
53
|
+
* ignore file ignores nothing, and `unread` is told it.
|
|
38
54
|
*/
|
|
39
|
-
export function gitIgnored(host, root) {
|
|
55
|
+
export function gitIgnored(host, root, unread = () => undefined) {
|
|
56
|
+
const found = repositoryOf(host, root);
|
|
57
|
+
const repository = found?.root;
|
|
58
|
+
const above = repository === undefined ? [] : [...ancestors(dirnamePath(root), repository)].reverse();
|
|
59
|
+
const excluded = found?.exclude === undefined ? [] : rulesIn(host, found.exclude, unread);
|
|
40
60
|
const read = new Map();
|
|
41
61
|
const rulesAt = (dir) => {
|
|
42
62
|
let rules = read.get(dir);
|
|
43
63
|
if (rules === undefined) {
|
|
44
|
-
|
|
45
|
-
rules = rulesOf(host.readFile(joinPath(dir, ".gitignore")));
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
rules = [];
|
|
49
|
-
}
|
|
64
|
+
rules = rulesIn(host, joinPath(dir, ".gitignore"), unread);
|
|
50
65
|
read.set(dir, rules);
|
|
51
66
|
}
|
|
52
67
|
return rules;
|
|
53
68
|
};
|
|
54
|
-
/** Whether the rules of `root` and of each directory down to one path's own decide it ignored. */
|
|
55
69
|
const decided = (path, directory) => {
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
dirs.unshift(root);
|
|
70
|
+
const sources = [
|
|
71
|
+
...(repository === undefined ? [] : [[repository, excluded]]),
|
|
72
|
+
...[...above, ...[...ancestors(dirnamePath(path), root)].reverse()].map((dir) => [dir, rulesAt(dir)]),
|
|
73
|
+
];
|
|
61
74
|
let ignored = false;
|
|
62
|
-
for (const dir of
|
|
63
|
-
const below = relativePath(dir, path);
|
|
64
|
-
for (const rule of
|
|
65
|
-
if ((directory || !rule.directoryOnly) && rule.expression.test(below
|
|
75
|
+
for (const [dir, rules] of sources) {
|
|
76
|
+
const below = relativePath(dir, path) ?? "";
|
|
77
|
+
for (const rule of rules) {
|
|
78
|
+
if ((directory || !rule.directoryOnly) && rule.expression.test(below)) {
|
|
66
79
|
ignored = !rule.negated;
|
|
67
80
|
}
|
|
68
81
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The import bindings of one file: the names its import declarations bind, which only
|
|
3
3
|
* the file itself can read.
|
|
4
4
|
*/
|
|
5
|
-
import { isExportSpecifier, isExternalModuleReference,
|
|
5
|
+
import { isExportDeclaration, isExportSpecifier, isExternalModuleReference, isImportDeclaration, isImportEqualsDeclaration, isJsxElement, isJsxFragment, isJsxSelfClosingElement, isNamedExports, isNamespaceImport, SyntaxKind, } from "@typescript/native/ast";
|
|
6
6
|
/** The extensions of the files whose import bindings are judged: no markup can read them. */
|
|
7
7
|
const JUDGED = /\.(?:[mc]?ts|tsx|[mc]?js|jsx)$/u;
|
|
8
8
|
/** The compiler's `jsx` settings whose emit calls no factory the file must hold. */
|
|
@@ -13,41 +13,86 @@ const DOC_COMMENT = /\/\*\*[\s\S]*?\*\//gu;
|
|
|
13
13
|
const DOC_REFERENCE = /\{[^{}]*\}|@see\s+[A-Za-z_$][\w$.]*/gu;
|
|
14
14
|
/** The factory a pragma comment names: `@jsx h` or `@jsxFrag Fragment`. */
|
|
15
15
|
const PRAGMA = /@jsx(?:Frag)?\s+([A-Za-z_$][\w$]*)/gu;
|
|
16
|
+
const bindingsCache = new WeakMap();
|
|
16
17
|
/**
|
|
17
|
-
*
|
|
18
|
-
* an `import` declaration
|
|
19
|
-
*
|
|
18
|
+
* Every name one import declaration binds, in source order: the default, named and
|
|
19
|
+
* namespace names of an `import` declaration and the name of an `import x = …` declaration.
|
|
20
|
+
* A namespace import and an import assignment bind a whole module.
|
|
20
21
|
*/
|
|
21
|
-
export function
|
|
22
|
-
if (
|
|
23
|
-
return [
|
|
22
|
+
export function declarationBindings(declaration) {
|
|
23
|
+
if (isImportEqualsDeclaration(declaration)) {
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
name: declaration.name,
|
|
27
|
+
equals: {
|
|
28
|
+
exported: (declaration.modifiers ?? []).some((modifier) => modifier.kind === SyntaxKind.ExportKeyword),
|
|
29
|
+
external: isExternalModuleReference(declaration.moduleReference),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
];
|
|
24
33
|
}
|
|
34
|
+
const clause = declaration.importClause;
|
|
25
35
|
const found = [];
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
else if (named !== undefined) {
|
|
37
|
-
for (const element of named.elements) {
|
|
38
|
-
found.push(element.name);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
else if (isImportEqualsDeclaration(statement) &&
|
|
43
|
-
isExternalModuleReference(statement.moduleReference) &&
|
|
44
|
-
isIdentifier(statement.name) &&
|
|
45
|
-
!(statement.modifiers ?? []).some((modifier) => modifier.kind === SyntaxKind.ExportKeyword)) {
|
|
46
|
-
found.push(statement.name);
|
|
36
|
+
if (clause?.name !== undefined) {
|
|
37
|
+
found.push({ name: clause.name, imported: "default" });
|
|
38
|
+
}
|
|
39
|
+
const named = clause?.namedBindings;
|
|
40
|
+
if (named !== undefined && isNamespaceImport(named)) {
|
|
41
|
+
found.push({ name: named.name });
|
|
42
|
+
}
|
|
43
|
+
else if (named !== undefined) {
|
|
44
|
+
for (const element of named.elements) {
|
|
45
|
+
found.push({ name: element.name, imported: element.propertyName?.text ?? element.name.text });
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
48
|
return found;
|
|
50
49
|
}
|
|
50
|
+
/** Every name one file's top-level import declarations bind, in source order. */
|
|
51
|
+
export function bindingsOf(file) {
|
|
52
|
+
const known = bindingsCache.get(file);
|
|
53
|
+
if (known !== undefined) {
|
|
54
|
+
return known;
|
|
55
|
+
}
|
|
56
|
+
const found = file.statements.flatMap((statement) => isImportDeclaration(statement) || isImportEqualsDeclaration(statement)
|
|
57
|
+
? declarationBindings(statement)
|
|
58
|
+
: []);
|
|
59
|
+
bindingsCache.set(file, found);
|
|
60
|
+
return found;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The export names an import or a re-export declaration reads from the module it names,
|
|
64
|
+
* `undefined` standing for the whole module where a namespace or a star reads it; none for
|
|
65
|
+
* any other node.
|
|
66
|
+
*/
|
|
67
|
+
export function importedNames(node) {
|
|
68
|
+
if (isImportDeclaration(node)) {
|
|
69
|
+
return declarationBindings(node).map((binding) => binding.imported);
|
|
70
|
+
}
|
|
71
|
+
if (!isExportDeclaration(node)) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const clause = node.exportClause;
|
|
75
|
+
return clause === undefined || !isNamedExports(clause)
|
|
76
|
+
? [undefined]
|
|
77
|
+
: clause.elements.map((one) => (one.propertyName ?? one.name).text);
|
|
78
|
+
}
|
|
79
|
+
/** The export names {@link importedNames} gives one node, without the whole module. */
|
|
80
|
+
export function namesImported(node) {
|
|
81
|
+
return importedNames(node).flatMap((name) => name ?? []);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The bindings of one file that are judged as imports: those of {@link bindingsOf} but an
|
|
85
|
+
* `import x = …` that is exported or names no external module. None is judged in a
|
|
86
|
+
* declaration file or a component file.
|
|
87
|
+
*/
|
|
88
|
+
export function importBindings(file) {
|
|
89
|
+
if (file.isDeclarationFile || !JUDGED.test(file.fileName)) {
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
return bindingsOf(file).flatMap((binding) => binding.equals !== undefined && (binding.equals.exported || !binding.equals.external)
|
|
93
|
+
? []
|
|
94
|
+
: [binding.name]);
|
|
95
|
+
}
|
|
51
96
|
/** Whether one identifier names a binding in a local export, which reads it whatever it resolves to. */
|
|
52
97
|
export function exportsLocally(use) {
|
|
53
98
|
return isExportSpecifier(use.parent);
|