@mrclrchtr/supi-code-intelligence 6.1.0 → 6.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.md +3 -1
- package/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-core/src/debug-identity.ts +11 -0
- package/node_modules/@mrclrchtr/supi-core/src/debug.ts +5 -0
- package/node_modules/@mrclrchtr/supi-lsp/README.md +23 -3
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/debug-identity.ts +11 -0
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/debug.ts +5 -0
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/ignore/README.md +52 -0
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/ignore/index.js +785 -129
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/ignore/legacy.js +660 -98
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/ignore/package.json +10 -4
- package/node_modules/@mrclrchtr/supi-lsp/package.json +4 -5
- package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +16 -7
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client-diagnostic-cache.ts +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client-diagnostic-capabilities.ts +0 -5
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client-diagnostic-publication.ts +6 -3
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client-diagnostic-refresh.ts +2 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client-diagnostic-timing.ts +5 -2
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client-diagnostics.ts +2 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +17 -5
- package/node_modules/@mrclrchtr/supi-lsp/src/client/transport.ts +40 -18
- package/node_modules/@mrclrchtr/supi-lsp/src/config/config.ts +164 -30
- package/node_modules/@mrclrchtr/supi-lsp/src/config/lsp-settings.ts +9 -87
- package/node_modules/@mrclrchtr/supi-lsp/src/config/server-config.ts +0 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/config/tsconfig-scope.ts +4 -5
- package/node_modules/@mrclrchtr/supi-lsp/src/config/types.ts +0 -29
- package/node_modules/@mrclrchtr/supi-lsp/src/debug-telemetry.ts +7 -21
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-severity.ts +6 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/diagnostic-summary.ts +11 -14
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/evidence.ts +0 -5
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/stale-diagnostics.ts +0 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/diagnostics/workspace-sentinels.ts +29 -49
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-client-state.ts +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-diagnostics.ts +4 -8
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-helpers.ts +1 -9
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-process-crash-report.ts +106 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-project-info.ts +6 -3
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-recovery.ts +9 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-workspace-symbol.ts +26 -41
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +577 -152
- package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +4 -1
- package/node_modules/@mrclrchtr/supi-lsp/src/provider/semantic-symbol-mapper.ts +59 -28
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-controller.ts +27 -19
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-diagnostics.ts +54 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registration.ts +0 -17
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registry.ts +74 -19
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-transition-debug.ts +5 -2
- package/node_modules/@mrclrchtr/supi-lsp/src/session/scanner.ts +24 -21
- package/node_modules/@mrclrchtr/supi-lsp/src/session/workspace-lsp-runtime.ts +29 -3
- package/node_modules/@mrclrchtr/supi-lsp/src/summary.ts +19 -40
- package/node_modules/@mrclrchtr/supi-lsp/src/utils.ts +13 -19
- package/node_modules/@mrclrchtr/supi-lsp/src/workspace-path-policy.ts +296 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +6 -18
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/debug-identity.ts +11 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/src/debug.ts +5 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/README.md +29 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.cjs +99 -19
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.cjs.map +4 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.js +94 -18
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.js.map +4 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/debug/web-tree-sitter.wasm.map +14 -14
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/package.json +13 -8
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.cjs +97 -19
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.cjs.map +4 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.cts +28 -8
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.cts.map +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.ts +28 -8
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.d.ts.map +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.js +92 -18
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.js.map +4 -4
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/web-tree-sitter/web-tree-sitter.wasm.map +17 -17
- package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +7 -6
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm +0 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm.json +2 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/api.ts +1 -11
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/coordinates.ts +19 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/language.ts +5 -23
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/operation-support.ts +3 -21
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/provider/tree-sitter-provider.ts +5 -9
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/runtime-controller.ts +10 -20
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/session.ts +7 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/structural-worker-client.ts +9 -5
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/structural-worker-protocol.ts +134 -9
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/call-name.ts +96 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/call-sites.ts +11 -12
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/callees.ts +39 -56
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/exports.ts +9 -7
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/js-binding-pattern.ts +26 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/node-at.ts +2 -21
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/outline-html-sql.ts +144 -12
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/outline.ts +50 -37
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/scope.ts +138 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/types.ts +0 -7
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/worker/parsed-file-store.ts +1 -14
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/worker/runtime.ts +0 -10
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/worker/service.ts +6 -8
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/worker/worker-main.ts +34 -10
- package/package.json +5 -5
- package/src/analysis/capability/capability-warnings.ts +4 -22
- package/src/analysis/search/ast-scan-timing.ts +4 -2
- package/src/analysis/search/ast-scan.ts +1 -1
- package/src/api.ts +1 -0
- package/src/extension.ts +4 -2
- package/src/session/health-refresh.ts +26 -2
- package/src/session/health-types.ts +19 -0
- package/src/session/input/health-refactor.ts +16 -14
- package/src/session/refactor-types.ts +14 -1
- package/src/session/refactor-workflow.ts +21 -16
- package/src/substrate/lsp/lifecycle.ts +0 -3
- package/src/substrate/lsp/maintenance.ts +4 -5
- package/src/substrate/lsp/settings.ts +7 -9
- package/src/substrate/lsp/state.ts +0 -2
- package/src/substrate/workspace-provider-host.ts +2 -2
- package/src/tool/code_health/file-scope-markdown.ts +43 -0
- package/src/tool/code_health/markdown.ts +66 -66
- package/src/tool/code_health/refresh-outcome.ts +76 -0
- package/src/tool/code_health/refresh-status.ts +212 -23
- package/src/tool/code_health/result.ts +1 -0
- package/src/tool/code_health/tui.ts +18 -5
- package/src/tool/code_refactor_apply/guidance.ts +3 -2
- package/src/tool/code_refactor_plan/guidance.ts +1 -1
- package/src/tool/register.ts +5 -2
- package/src/tool/schemas.ts +21 -11
- package/node_modules/@mrclrchtr/supi-lsp/src/config/server-actions.ts +0 -59
- package/node_modules/@mrclrchtr/supi-lsp/src/pattern-matcher.ts +0 -24
- package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-kotlin-wasm.mjs +0 -132
- package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/generate-sql-wasm.mjs +0 -158
- package/node_modules/@mrclrchtr/supi-tree-sitter/scripts/vendor-wasm.mjs +0 -167
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/index.ts +0 -42
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/runtime-registration.ts +0 -37
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/session/service-registry.ts +0 -30
- package/node_modules/@mrclrchtr/supi-tree-sitter/src/tool/structure.ts +0 -8
package/README.md
CHANGED
|
@@ -81,11 +81,13 @@ The package adds eight tools that Pi selects as needed:
|
|
|
81
81
|
| `code_graph` | Follow LSP references and implementations plus AST calls made by a symbol |
|
|
82
82
|
| `code_find` | Search LSP workspace symbols or parsed AST source structure rather than raw text |
|
|
83
83
|
| `code_health` | Check live diagnostics, language servers, and code-intelligence availability |
|
|
84
|
-
| `code_refactor_plan` | Preview a precise rename or
|
|
84
|
+
| `code_refactor_plan` | Preview a precise rename, extraction, import cleanup, or dead-code deletion without changing files |
|
|
85
85
|
| `code_refactor_apply` | Apply a fresh refactor plan after safety checks |
|
|
86
86
|
|
|
87
87
|
Pi's built-in `grep` remains the right tool for literal or regular-expression searches; these tools add symbol and source-structure awareness.
|
|
88
88
|
|
|
89
|
+
`code_health({ refresh: true })` reports process-crash recovery as route-level data. It shows exact recovered, skipped, failed, and exhausted counts. It shows up to 16 server and workspace-relative root entries, plus the exact number of omitted entries. A skipped route gives the `use-exact-file` action. A failed or exhausted route gives the `reload-workspace` action. Markdown and expanded TUI output show route entries and bounded failure details. Compact TUI output shows the counts. Current and retained refresh results use the same outcome format.
|
|
90
|
+
|
|
89
91
|
## Install
|
|
90
92
|
|
|
91
93
|
```bash
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Maximum UTF-16 code-unit length of one debug identity string. */
|
|
2
|
+
export const MAX_DEBUG_IDENTITY_STRING = 512;
|
|
3
|
+
|
|
4
|
+
/** Marker appended to a truncated debug identity string. */
|
|
5
|
+
export const DEBUG_IDENTITY_TRUNCATION_MARKER = "…";
|
|
6
|
+
|
|
7
|
+
/** Bound one debug identity string, including its truncation marker. */
|
|
8
|
+
export function truncateDebugIdentity(value: string): string {
|
|
9
|
+
if (value.length <= MAX_DEBUG_IDENTITY_STRING) return value;
|
|
10
|
+
return `${value.slice(0, MAX_DEBUG_IDENTITY_STRING - 1)}${DEBUG_IDENTITY_TRUNCATION_MARKER}`;
|
|
11
|
+
}
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
// Kept separate from debug-registry.ts so debug-timing.ts can import the
|
|
4
4
|
// registry without creating an import cycle through the barrel re-export.
|
|
5
5
|
|
|
6
|
+
export {
|
|
7
|
+
DEBUG_IDENTITY_TRUNCATION_MARKER,
|
|
8
|
+
MAX_DEBUG_IDENTITY_STRING,
|
|
9
|
+
truncateDebugIdentity,
|
|
10
|
+
} from "./debug-identity.ts";
|
|
6
11
|
// biome-ignore lint/performance/noReExportAll: preserve the stable debug domain entry point
|
|
7
12
|
export * from "./debug-registry.ts";
|
|
8
13
|
// biome-ignore lint/performance/noReExportAll: preserve the stable debug domain entry point
|
|
@@ -60,6 +60,8 @@ Server readiness follows LSP work-done progress: a created progress token is pen
|
|
|
60
60
|
|
|
61
61
|
A workspace diagnostic refresh returns exact coverage counts for requested, confirmed, unconfirmed, failed, and removed tracked documents. `code_health` marks tracked-file diagnostics as complete when each requested document is confirmed or known to be removed. It shows non-empty tentative diagnostics as partial entries, reports the same coverage counts in summary and detailed views, and explains when a diagnostic republish is needed. A refresh attempt does not prove fresh evidence by itself. A removed file is reported by the refresh that finds it and is not retained in later tracked-file snapshots.
|
|
62
62
|
|
|
63
|
+
An explicit diagnostic refresh also returns a bounded process-crash report. It gives exact recovered, skipped, failed, and exhausted route counts, up to 16 route entries, and an omitted-entry count. Each entry names the server and workspace-relative root. A skipped route recommends an exact-file refresh; a failed or exhausted route recommends a workspace reload. A failed entry may include only the caught error message, limited to 512 characters. Broad refreshes select only routes whose root overlaps the requested directory and use retained tracked-file paths from the crash snapshot. Exact-file readiness reports only the file's route. Recovery does not cold-start routes, consume an attempt for a skip, or add a second attempt.
|
|
64
|
+
|
|
63
65
|
An explicit recovery pass restarts a push-only client only on a protocol-stall signal (a readiness stall, or repeated JSON-RPC request failures) — never on unconfirmed evidence alone, because the reopen-resync fallback recovers unconfirmed documents without discarding warm server state. It never restarts a pull-capable client because push evidence is absent, and it never restarts a client during passive health display. Each client route restarts at most once per workspace invalidation generation. The replacement process has a fixed startup bound of 5 seconds; exceeding the bound fails closed as start-failed without retry. Recovery telemetry records the outcome, elapsed time, attempted clients, restart count, the bounded server names involved, and the stall signal that triggered a restart, without changing the evidence semantics of the result.
|
|
64
66
|
|
|
65
67
|
### Optional diagnostic configuration
|
|
@@ -82,6 +84,24 @@ Configuration overrides merge with the built-in server definitions. Use `.pi/sup
|
|
|
82
84
|
|
|
83
85
|
Gopls pull diagnostics stay opt-in while golang/go#70199 is open; without the option the built-in Go configuration stays in push mode. Kotlin's `--stdio` argument is already part of the built-in configuration and needs no override.
|
|
84
86
|
|
|
87
|
+
### Automatic workspace path policy
|
|
88
|
+
|
|
89
|
+
Automatic LSP work uses one path policy that does not change for each workspace runtime. It covers project discovery, route startup, warm-up, sentinel and source-file lists, created-file tracking, runtime guidance, and diagnostic summaries not tied to one request.
|
|
90
|
+
|
|
91
|
+
The policy excludes these directories by default: `.git`, `.cache`, `.pi`, `.pnpm`, `node_modules`, `dist`, `build`, `out`, `coverage`, `.next`, `.nuxt`, `.turbo`, and `__pycache__`. It also applies `lsp.exclude` patterns and root or nested `.gitignore` rules. Patterns use gitignore syntax, including rules relative to each directory and `!` rules. Built-in exclusions cannot be enabled again. Symbolic-link directories are not visited. Other dot-directories, such as `.github` and `.storybook`, remain allowed.
|
|
92
|
+
|
|
93
|
+
Set `lsp.exclude` in project or global SuPi configuration:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"lsp": {
|
|
98
|
+
"exclude": ["generated/**", "!generated/keep.ts"]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
An exact semantic request can still route an excluded file when a compatible server is available. This does not add the file to automatic work. Configured diagnostic suppression still applies to diagnostic output.
|
|
104
|
+
|
|
85
105
|
### Custom server configuration
|
|
86
106
|
|
|
87
107
|
A custom server needs a command and at least one file type:
|
|
@@ -104,7 +124,7 @@ A custom server needs a command and at least one file type:
|
|
|
104
124
|
|
|
105
125
|
File types do not include a leading dot. If `rootMarkers` is omitted, the server uses the session root.
|
|
106
126
|
|
|
107
|
-
|
|
127
|
+
Disable one language with `lsp.servers.<language>.enabled: false`. Use `/supi-ci-status` from `@mrclrchtr/supi-code-intelligence` to see detected, running, and missing servers.
|
|
108
128
|
|
|
109
129
|
## What it provides
|
|
110
130
|
|
|
@@ -191,7 +211,7 @@ Detected servers start concurrently. In a polyglot workspace, disable unneeded l
|
|
|
191
211
|
}
|
|
192
212
|
```
|
|
193
213
|
|
|
194
|
-
|
|
214
|
+
If every server definition is disabled, the controller publishes an explicit `disabled` runtime state instead of an empty `ready` runtime. When a ready owner has no active client yet, it stays published for lazy routing while semantic capability remains pending.
|
|
195
215
|
|
|
196
216
|
## Architecture
|
|
197
217
|
|
|
@@ -212,7 +232,7 @@ See [`docs/adr/0016-workspace-lsp-runtime-interface.md`](../../docs/adr/0016-wor
|
|
|
212
232
|
|
|
213
233
|
## Package exports
|
|
214
234
|
|
|
215
|
-
- `@mrclrchtr/supi-lsp/api` — runtime/controller/config types and
|
|
235
|
+
- `@mrclrchtr/supi-lsp/api` — runtime/controller/config types, registry operations, and automatic path-policy helpers
|
|
216
236
|
- `@mrclrchtr/supi-lsp/provider/lsp-semantic-provider` — semantic provider adapter
|
|
217
237
|
|
|
218
238
|
## Source
|
package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/src/debug-identity.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Maximum UTF-16 code-unit length of one debug identity string. */
|
|
2
|
+
export const MAX_DEBUG_IDENTITY_STRING = 512;
|
|
3
|
+
|
|
4
|
+
/** Marker appended to a truncated debug identity string. */
|
|
5
|
+
export const DEBUG_IDENTITY_TRUNCATION_MARKER = "…";
|
|
6
|
+
|
|
7
|
+
/** Bound one debug identity string, including its truncation marker. */
|
|
8
|
+
export function truncateDebugIdentity(value: string): string {
|
|
9
|
+
if (value.length <= MAX_DEBUG_IDENTITY_STRING) return value;
|
|
10
|
+
return `${value.slice(0, MAX_DEBUG_IDENTITY_STRING - 1)}${DEBUG_IDENTITY_TRUNCATION_MARKER}`;
|
|
11
|
+
}
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
// Kept separate from debug-registry.ts so debug-timing.ts can import the
|
|
4
4
|
// registry without creating an import cycle through the barrel re-export.
|
|
5
5
|
|
|
6
|
+
export {
|
|
7
|
+
DEBUG_IDENTITY_TRUNCATION_MARKER,
|
|
8
|
+
MAX_DEBUG_IDENTITY_STRING,
|
|
9
|
+
truncateDebugIdentity,
|
|
10
|
+
} from "./debug-identity.ts";
|
|
6
11
|
// biome-ignore lint/performance/noReExportAll: preserve the stable debug domain entry point
|
|
7
12
|
export * from "./debug-registry.ts";
|
|
8
13
|
// biome-ignore lint/performance/noReExportAll: preserve the stable debug domain entry point
|
|
@@ -384,6 +384,58 @@ ignore({
|
|
|
384
384
|
|
|
385
385
|
# Upgrade Guide
|
|
386
386
|
|
|
387
|
+
## Known differences from `git`
|
|
388
|
+
|
|
389
|
+
`ignore` aims to behave exactly like `git check-ignore`, and its test suite
|
|
390
|
+
verifies every fixture against the real `git` binary. A few divergences are
|
|
391
|
+
deliberate or inherited from how JavaScript differs from C. They are listed
|
|
392
|
+
here so you do not have to discover them in production.
|
|
393
|
+
|
|
394
|
+
### Characters, not bytes
|
|
395
|
+
|
|
396
|
+
`git` matches patterns against the **UTF-8 bytes** of a path; JavaScript
|
|
397
|
+
strings are sequences of UTF-16 code units, and `ignore` matches those.
|
|
398
|
+
The two agree on ASCII and disagree on the width of everything else:
|
|
399
|
+
|
|
400
|
+
```js
|
|
401
|
+
// git needs two '?' to match 'é' (two bytes); ignore needs one:
|
|
402
|
+
ignore().add('x?y').ignores('xéy') // true; git: false
|
|
403
|
+
|
|
404
|
+
// a range cannot span multi-byte characters in git at all:
|
|
405
|
+
ignore().add('m[À-È]n').ignores('mÁn') // true; git: false
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
With `ignorecase` enabled, `git` folds case for ASCII only, while
|
|
409
|
+
JavaScript's `i` flag folds Unicode — so `É.txt` ignores `é.txt` here and
|
|
410
|
+
not in `git`. For ASCII paths and patterns there is no difference.
|
|
411
|
+
|
|
412
|
+
### `ignorecase` defaults to `true`
|
|
413
|
+
|
|
414
|
+
`git` on a case-sensitive filesystem (production Linux) is case-sensitive.
|
|
415
|
+
`ignore` is case-insensitive unless you pass `ignorecase: false`. If your
|
|
416
|
+
code runs against a real repository, pass the value of the repository's
|
|
417
|
+
`core.ignorecase` explicitly.
|
|
418
|
+
|
|
419
|
+
### `***` and friends follow the documentation, not the binary
|
|
420
|
+
|
|
421
|
+
gitignore(5) says a run of more than two asterisks is "considered regular
|
|
422
|
+
asterisks". The `git` binary, however, strips the literal prefix of a
|
|
423
|
+
pattern before matching, which makes patterns like `***/foo`, `a/***` and
|
|
424
|
+
`a**/b` behave as `**` globstars there. `ignore` follows the documented
|
|
425
|
+
behavior. If you need the globstar, write `**`.
|
|
426
|
+
|
|
427
|
+
### `checkIgnore()` and a directory passed with a trailing slash
|
|
428
|
+
|
|
429
|
+
`git check-ignore` treats its arguments as plain strings: handed `a/`, it
|
|
430
|
+
computes an empty basename, with surprising results — `a/**` matches `a/`
|
|
431
|
+
itself, and a negated basename pattern like `!a` fails to match it. During
|
|
432
|
+
an actual traversal git behaves differently: `a/**` does **not** exclude
|
|
433
|
+
the directory `a` (that is what allows it to descend and exclude the
|
|
434
|
+
contents), and `!a` negates it normally. `ignore` models the traversal
|
|
435
|
+
semantics: `'a/'` means *the directory a*, with its basename `a/`. Where
|
|
436
|
+
the two disagree, `ignore` sides with what `git status` actually does
|
|
437
|
+
rather than with the string-level quirks of `check-ignore`.
|
|
438
|
+
|
|
387
439
|
## Upgrade 4.x -> 5.x
|
|
388
440
|
|
|
389
441
|
Since `5.0.0`, if an invalid `Pathname` passed into `ig.ignores()`, an error will be thrown, unless `options.allowRelative = true` is passed to the `Ignore` factory.
|