scip-cli 2.11.0__tar.gz → 2.12.0__tar.gz
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.
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.github/workflows/ci.yml +1 -1
- {scip_cli-2.11.0 → scip_cli-2.12.0}/PKG-INFO +2 -2
- {scip_cli-2.11.0 → scip_cli-2.12.0}/README.md +1 -1
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/incremental-reindex-roadmap.md +9 -6
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/SKILL.md +1 -1
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/__init__.py +1 -1
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/constants.py +6 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/shards.py +6 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/typescript.py +26 -4
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_incremental_shards.py +47 -1
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_indexer_fallback.py +1 -2
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.agents/commands/migration-problems.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.agents/rules/agent.mdc +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.github/pull_request_template.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.gitignore +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/.pre-commit-config.yaml +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/AGENTS.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/CODE_OF_CONDUCT.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/CONTRIBUTING.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/LICENSE +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/SECURITY.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/port.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/conclusions.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/experiment-summary.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/go-experiment.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/go.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/plan.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/rust-experiment.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/rust.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/summary.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/zig-experiment.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/docs/ports/zig.md +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/pyproject.toml +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/__main__.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/__init__.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/common.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/file.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/graph.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/live.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/project.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/sections.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/symbol.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/analyze/targets.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/cache.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/cli_args.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/__init__.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/analyze.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/code.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/deps.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/members.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/rdeps.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/refs.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/reindex.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/search.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/skill.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/commands/symbols.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/config.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/debug.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/discover.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/exclude.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/__init__.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/convert.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/core.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/languages.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/orchestrate.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/postprocess.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/indexing/runners.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/merge.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/metadata.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/output.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/paths.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/project.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/queries.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/scip_tool.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/scope.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/session.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/source.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/sql.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/symbols.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/targets.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scip_cli/tsconfig.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scripts/bench.sh +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scripts/bench_postprocess.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scripts/build.sh +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scripts/publish.sh +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/scripts/test.sh +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/__init__.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/analyze_db.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/bench_db.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/conftest.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/e2e_harness.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixture_catalog.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/package.json +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/__tests__/fixtureOnly.spec.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/app/handler.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/config.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/consumer.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/dead.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/domain/i18n/en.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/domain/i18n/index.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/domain/i18n/useLocale.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/domain/labels/index.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/events/streamTypes.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/gateway/index.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/helper.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/hooks/useHookA.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/hooks/useHookB.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/hooks/useItems.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/index.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/integrations/inferenceClient.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/lib/handler.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/loaders/useInference.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/models/MutationAggregate.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/pages/panelPage.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/rules/applyRule.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/types/a.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/types/b.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/ui/Button.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/ui/LazyPanel.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/ui/buttonConsumer.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/ui/menuModule.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/user.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/widget.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/widgets/OrphanWidget.ts +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/tsconfig.json +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/perf_util.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_analyze.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_analyze_graph.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_analyze_live.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_analyze_perf.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_bench_queries.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_cache.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_composability.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_config.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_discover.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_e2e.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_e2e_analyze_patterns.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_e2e_perf.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_exclude_globs.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_index_batching.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_index_prune.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_indexer_env.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_merge.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_metadata.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_multi_symbol.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_pure_functions.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_python_index_integration.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_qualified_symbols.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_reindex.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_scip_tool.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_scope.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_symbols_freq.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_targets.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_tsconfig.py +0 -0
- {scip_cli-2.11.0 → scip_cli-2.12.0}/tests/test_typescript_projects.py +0 -0
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
python -m venv .venv
|
|
30
30
|
source .venv/bin/activate
|
|
31
31
|
pip install -e ".[dev]"
|
|
32
|
-
npm install -g
|
|
32
|
+
npm install -g github:flesler/scip-typescript#feat/incremental-tsc
|
|
33
33
|
mkdir -p ~/.local/bin
|
|
34
34
|
curl -sL https://github.com/scip-code/scip/releases/download/v0.9.0/scip-linux-amd64.tar.gz | tar xz -C ~/.local/bin
|
|
35
35
|
echo "$VIRTUAL_ENV/bin" >> $GITHUB_PATH
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: scip-cli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.12.0
|
|
4
4
|
Summary: Fast code intelligence via SCIP indexes
|
|
5
5
|
Project-URL: Homepage, https://github.com/flesler/scip-cli
|
|
6
6
|
Author: Ariel Flesler
|
|
@@ -252,7 +252,7 @@ Other environment variables:
|
|
|
252
252
|
|`SCIP_CLI_MAX_DEF_LINES`|Max definition lines in `code` output|
|
|
253
253
|
|`SCIP_CLI_DEBUG`|Log SQL queries to stderr|
|
|
254
254
|
|
|
255
|
-
**Version policy:** only the `scip` converter (`expt-convert`) is pinned to the 0.8.x release line because it defines the SQLite schema.
|
|
255
|
+
**Version policy:** only the `scip` converter (`expt-convert`) is pinned to the 0.8.x release line because it defines the SQLite schema. `scip-typescript` installs via npx from the GitHub fork in `scip_cli/indexing/constants.py` when not on PATH (until upstream ships incremental flags). `scip-python` via `npx` at latest; `scip-go` via `go install @latest`. `rust-analyzer` installs via `rustup component add`.
|
|
256
256
|
|
|
257
257
|
Large monorepos (>10 tsconfig projects) log per-project progress to stderr during indexing; smaller repos stay quiet aside from the final `Indexed … (size)` line.
|
|
258
258
|
|
|
@@ -231,7 +231,7 @@ Other environment variables:
|
|
|
231
231
|
|`SCIP_CLI_MAX_DEF_LINES`|Max definition lines in `code` output|
|
|
232
232
|
|`SCIP_CLI_DEBUG`|Log SQL queries to stderr|
|
|
233
233
|
|
|
234
|
-
**Version policy:** only the `scip` converter (`expt-convert`) is pinned to the 0.8.x release line because it defines the SQLite schema.
|
|
234
|
+
**Version policy:** only the `scip` converter (`expt-convert`) is pinned to the 0.8.x release line because it defines the SQLite schema. `scip-typescript` installs via npx from the GitHub fork in `scip_cli/indexing/constants.py` when not on PATH (until upstream ships incremental flags). `scip-python` via `npx` at latest; `scip-go` via `go install @latest`. `rust-analyzer` installs via `rustup component add`.
|
|
235
235
|
|
|
236
236
|
Large monorepos (>10 tsconfig projects) log per-project progress to stderr during indexing; smaller repos stay quiet aside from the final `Indexed … (size)` line.
|
|
237
237
|
|
|
@@ -18,13 +18,16 @@ Per-tsconfig shard cache with content fingerprints. **Shippable:** unit + integr
|
|
|
18
18
|
- [x] Stderr stats: `Incremental: N shard(s) reused, M reindexed`
|
|
19
19
|
- [x] Update `scip_cli/SKILL.md` and README flag list
|
|
20
20
|
|
|
21
|
-
## Phase 2 — scip-typescript fork: TSC incremental program
|
|
21
|
+
## Phase 2 — scip-typescript fork: TSC incremental program (in progress)
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
27
|
-
- [
|
|
23
|
+
Fork work lives outside this repo (local clone + PR to `sourcegraph/scip-typescript`).
|
|
24
|
+
|
|
25
|
+
- [x] Fork `sourcegraph/scip-typescript` (local: implement + tests passing)
|
|
26
|
+
- [x] `--incremental` / `--ts-build-info-dir` CLI flags
|
|
27
|
+
- [x] `createIncrementalProgram` + `createIncrementalCompilerHost` in `ProjectIndexer`
|
|
28
|
+
- [x] scip-cli passes `--incremental --ts-build-info-dir <cache>/tsbuildinfo` on `reindex --incremental` dirty shards
|
|
29
|
+
- [x] npx fallback via `github:flesler/scip-typescript#feat/incremental-tsc` (`SCIP_TYPESCRIPT_NPX_PACKAGE`; switch back when upstream merges)
|
|
30
|
+
- [ ] Upstream PR merged or fork published to npm long-term
|
|
28
31
|
- [ ] Benchmark dirty shard: program build time before/after
|
|
29
32
|
|
|
30
33
|
## Phase 3 — File-level incremental inside a shard
|
|
@@ -169,4 +169,4 @@ reindex [--path DIR ...] [--tsconfig FILE_OR_GLOB ...] [--exclude [GLOB ...]] [-
|
|
|
169
169
|
|
|
170
170
|
`--fresh` ignores persisted `metadata.json` and clears it before indexing unless `--path`, `--tsconfig`, or `--exclude` are set on the same command (use `reindex --fresh` to restore a full index).
|
|
171
171
|
|
|
172
|
-
`--incremental` reuses cached per-project part DBs under `shards/` in the project cache dir (`~/.cache/scip-cli/projects/<slug>/`, alongside `index.db` and `metadata.json`) when inputs are unchanged. **Currently TypeScript only** (Python reindex rejects the flag). Forces one indexer run per discovered project. A plain `reindex` clears the incremental cache; run `reindex --incremental` after an initial full index to benefit. Cannot combine with `--fresh`.
|
|
172
|
+
`--incremental` reuses cached per-project part DBs under `shards/` in the project cache dir (`~/.cache/scip-cli/projects/<slug>/`, alongside `index.db` and `metadata.json`) when inputs are unchanged. **Currently TypeScript only** (Python reindex rejects the flag). Forces one indexer run per discovered project. On dirty shards passes TSC incremental flags; `.tsbuildinfo` under `tsbuildinfo/` in the same cache dir. When `scip-typescript` is not on PATH, npx installs from the GitHub fork (`SCIP_TYPESCRIPT_NPX_PACKAGE` in `indexing/constants.py`) until upstream ships those flags. A plain `reindex` clears the incremental cache; run `reindex --incremental` after an initial full index to benefit. Cannot combine with `--fresh`.
|
|
@@ -7,6 +7,12 @@ SCIP_INSTALL_URL = "https://github.com/scip-code/scip/releases"
|
|
|
7
7
|
|
|
8
8
|
# Language indexers (npx / go install) use latest on first use.
|
|
9
9
|
# The scip expt-convert binary is pinned separately in scip_tool.py (DB schema).
|
|
10
|
+
#
|
|
11
|
+
# scip-typescript npx fallback (when the binary is not on PATH). Fork adds
|
|
12
|
+
# --incremental / --ts-build-info-dir for reindex --incremental. Switch back to
|
|
13
|
+
# @sourcegraph/scip-typescript once upstream merges and releases; otherwise
|
|
14
|
+
# publish the fork to npm long-term.
|
|
15
|
+
SCIP_TYPESCRIPT_NPX_PACKAGE = "github:flesler/scip-typescript#feat/incremental-tsc"
|
|
10
16
|
# scip-typescript accepts many tsconfig paths per invocation (one .scip, one convert, no merge).
|
|
11
17
|
# Split only when SCIP_CLI_TS_INDEX_BATCH_SIZE is set (OOM/timeout tuning).
|
|
12
18
|
DEFAULT_TS_INDEX_BATCH_SIZE = None
|
|
@@ -13,6 +13,7 @@ from ..tsconfig import resolved_exclude, resolved_include_or_files, tsconfig_for
|
|
|
13
13
|
MANIFEST_VERSION = 1
|
|
14
14
|
MANIFEST_FILENAME = "manifest.json"
|
|
15
15
|
SHARDS_DIRNAME = "shards"
|
|
16
|
+
TSBUILDINFO_DIRNAME = "tsbuildinfo"
|
|
16
17
|
|
|
17
18
|
_SOURCE_SUFFIXES = frozenset({".ts", ".tsx", ".js", ".jsx", ".mts", ".cts", ".mjs", ".cjs"})
|
|
18
19
|
|
|
@@ -21,6 +22,11 @@ def shards_dir(cache_dir: Path) -> Path:
|
|
|
21
22
|
return Path(cache_dir) / SHARDS_DIRNAME
|
|
22
23
|
|
|
23
24
|
|
|
25
|
+
def ts_build_info_dir(cache_dir: Path) -> Path:
|
|
26
|
+
"""Directory for per-tsconfig .tsbuildinfo files passed to scip-typescript."""
|
|
27
|
+
return Path(cache_dir) / TSBUILDINFO_DIRNAME
|
|
28
|
+
|
|
29
|
+
|
|
24
30
|
def manifest_path(cache_dir: Path) -> Path:
|
|
25
31
|
return shards_dir(cache_dir) / MANIFEST_FILENAME
|
|
26
32
|
|
|
@@ -14,7 +14,7 @@ from ..config import CONFIG_FILENAME, load_project_config, resolve_index_roots
|
|
|
14
14
|
from ..discover import discover_typescript_projects
|
|
15
15
|
from ..scope import load_index_scope, projects_matching_scope
|
|
16
16
|
from ..tsconfig import allow_js_overlay, scope_tsconfig_paths, tsconfig_for_project
|
|
17
|
-
from .constants import PROGRESS_LOG_MIN_PROJECTS
|
|
17
|
+
from .constants import PROGRESS_LOG_MIN_PROJECTS, SCIP_TYPESCRIPT_NPX_PACKAGE
|
|
18
18
|
from .convert import convert_scip_to_db
|
|
19
19
|
from .orchestrate import (
|
|
20
20
|
batch_projects,
|
|
@@ -34,6 +34,7 @@ from .shards import (
|
|
|
34
34
|
shard_db_filename,
|
|
35
35
|
shard_db_path,
|
|
36
36
|
shard_key,
|
|
37
|
+
ts_build_info_dir,
|
|
37
38
|
)
|
|
38
39
|
|
|
39
40
|
|
|
@@ -67,11 +68,22 @@ def typescript_projects(root: Path) -> list[Path]:
|
|
|
67
68
|
return sorted(merged.values(), key=str)
|
|
68
69
|
|
|
69
70
|
|
|
70
|
-
def _typescript_index_args(
|
|
71
|
+
def _typescript_index_args(
|
|
72
|
+
root,
|
|
73
|
+
output_scip,
|
|
74
|
+
projects,
|
|
75
|
+
*,
|
|
76
|
+
cache_dir: Path | None = None,
|
|
77
|
+
tsc_incremental: bool = False,
|
|
78
|
+
):
|
|
71
79
|
args = ["index", "--output", str(output_scip)]
|
|
72
80
|
root = Path(root)
|
|
73
81
|
if not (root / "tsconfig.json").exists():
|
|
74
82
|
args.insert(1, "--infer-tsconfig")
|
|
83
|
+
if tsc_incremental and cache_dir is not None:
|
|
84
|
+
build_info_dir = ts_build_info_dir(cache_dir)
|
|
85
|
+
build_info_dir.mkdir(parents=True, exist_ok=True)
|
|
86
|
+
args.extend(["--incremental", "--ts-build-info-dir", str(build_info_dir)])
|
|
75
87
|
args.extend(str(project) for project in projects)
|
|
76
88
|
return args
|
|
77
89
|
|
|
@@ -110,6 +122,8 @@ def index_ts_projects(
|
|
|
110
122
|
*,
|
|
111
123
|
output_db: Path | None = None,
|
|
112
124
|
exclude_globs: tuple[str, ...] = (),
|
|
125
|
+
cache_dir: Path | None = None,
|
|
126
|
+
tsc_incremental: bool = False,
|
|
113
127
|
):
|
|
114
128
|
"""Index one or more TypeScript projects into work_dir/index.db (or output_db when set)."""
|
|
115
129
|
root = Path(root)
|
|
@@ -119,13 +133,19 @@ def index_ts_projects(
|
|
|
119
133
|
part_scip = work_dir / "index.scip"
|
|
120
134
|
db_path = Path(output_db) if output_db is not None else work_dir / "index.db"
|
|
121
135
|
index_projects = materialize_allow_js_projects(root, projects, work_dir)
|
|
122
|
-
index_args = _typescript_index_args(
|
|
136
|
+
index_args = _typescript_index_args(
|
|
137
|
+
root,
|
|
138
|
+
part_scip,
|
|
139
|
+
index_projects,
|
|
140
|
+
cache_dir=cache_dir,
|
|
141
|
+
tsc_incremental=tsc_incremental,
|
|
142
|
+
)
|
|
123
143
|
result = run_indexer_with_fallback(
|
|
124
144
|
"scip-typescript",
|
|
125
145
|
index_args,
|
|
126
146
|
str(root),
|
|
127
147
|
env=env,
|
|
128
|
-
npx_package=
|
|
148
|
+
npx_package=SCIP_TYPESCRIPT_NPX_PACKAGE,
|
|
129
149
|
)
|
|
130
150
|
if result.returncode != 0:
|
|
131
151
|
return label, None, result.stderr.strip() or "indexing failed"
|
|
@@ -161,6 +181,8 @@ def _index_shard_batch(
|
|
|
161
181
|
env,
|
|
162
182
|
output_db=output_db,
|
|
163
183
|
exclude_globs=exclude_globs,
|
|
184
|
+
cache_dir=cache_dir,
|
|
185
|
+
tsc_incremental=True,
|
|
164
186
|
)
|
|
165
187
|
if db_path is None:
|
|
166
188
|
return label, None, error
|
|
@@ -13,6 +13,7 @@ from scip_cli.indexing.shards import (
|
|
|
13
13
|
save_shard_manifest,
|
|
14
14
|
shard_db_path,
|
|
15
15
|
shard_key,
|
|
16
|
+
ts_build_info_dir,
|
|
16
17
|
)
|
|
17
18
|
|
|
18
19
|
|
|
@@ -29,6 +30,41 @@ def _write_ts_project(root: Path, rel_dir: str, *, source: str = "export const x
|
|
|
29
30
|
return Path(rel_dir)
|
|
30
31
|
|
|
31
32
|
|
|
33
|
+
class TestTsBuildInfoDir:
|
|
34
|
+
def test_lives_under_cache_dir(self, tmp_path):
|
|
35
|
+
cache_dir = tmp_path / "cache"
|
|
36
|
+
assert ts_build_info_dir(cache_dir) == cache_dir / "tsbuildinfo"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class TestTypescriptIndexArgs:
|
|
40
|
+
def test_incremental_passes_tsc_flags(self, tmp_path):
|
|
41
|
+
from scip_cli.indexing.typescript import _typescript_index_args
|
|
42
|
+
|
|
43
|
+
cache_dir = tmp_path / "cache"
|
|
44
|
+
args = _typescript_index_args(
|
|
45
|
+
tmp_path,
|
|
46
|
+
tmp_path / "out.scip",
|
|
47
|
+
[Path("pkg/tsconfig.json")],
|
|
48
|
+
cache_dir=cache_dir,
|
|
49
|
+
tsc_incremental=True,
|
|
50
|
+
)
|
|
51
|
+
assert "--incremental" in args
|
|
52
|
+
assert "--ts-build-info-dir" in args
|
|
53
|
+
assert str(ts_build_info_dir(cache_dir)) in args
|
|
54
|
+
|
|
55
|
+
def test_full_reindex_omits_tsc_flags(self, tmp_path):
|
|
56
|
+
from scip_cli.indexing.typescript import _typescript_index_args
|
|
57
|
+
|
|
58
|
+
args = _typescript_index_args(
|
|
59
|
+
tmp_path,
|
|
60
|
+
tmp_path / "out.scip",
|
|
61
|
+
[Path("pkg/tsconfig.json")],
|
|
62
|
+
tsc_incremental=False,
|
|
63
|
+
)
|
|
64
|
+
assert "--incremental" not in args
|
|
65
|
+
assert "--ts-build-info-dir" not in args
|
|
66
|
+
|
|
67
|
+
|
|
32
68
|
class TestShardFingerprint:
|
|
33
69
|
def test_fingerprint_stable_for_same_tree(self, tmp_path):
|
|
34
70
|
root = tmp_path / "repo"
|
|
@@ -205,7 +241,17 @@ class TestIndexTypescriptIncremental:
|
|
|
205
241
|
cache_dir = tmp_path / "cache"
|
|
206
242
|
calls: list[list[Path]] = []
|
|
207
243
|
|
|
208
|
-
def fake_index_ts_projects(
|
|
244
|
+
def fake_index_ts_projects(
|
|
245
|
+
_root,
|
|
246
|
+
batch,
|
|
247
|
+
work_dir,
|
|
248
|
+
_env,
|
|
249
|
+
*,
|
|
250
|
+
output_db=None,
|
|
251
|
+
exclude_globs=(),
|
|
252
|
+
cache_dir=None,
|
|
253
|
+
tsc_incremental=False,
|
|
254
|
+
):
|
|
209
255
|
calls.append(list(batch))
|
|
210
256
|
db = Path(output_db) if output_db is not None else Path(work_dir) / "index.db"
|
|
211
257
|
label = batch[0].as_posix()
|
|
@@ -247,8 +247,7 @@ class TestRunIndexerWithFallback:
|
|
|
247
247
|
["index"],
|
|
248
248
|
"/tmp",
|
|
249
249
|
env={},
|
|
250
|
-
npx_package="
|
|
251
|
-
npx_version="0.4.0",
|
|
250
|
+
npx_package="github:flesler/scip-typescript#feat/incremental-tsc",
|
|
252
251
|
)
|
|
253
252
|
assert result is mock_result
|
|
254
253
|
mock_npx.assert_called_once()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/domain/i18n/index.ts
RENAMED
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/domain/i18n/useLocale.ts
RENAMED
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/domain/labels/index.ts
RENAMED
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/events/streamTypes.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/loaders/useInference.ts
RENAMED
|
File without changes
|
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/pages/panelPage.ts
RENAMED
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/rules/applyRule.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/ui/buttonConsumer.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{scip_cli-2.11.0 → scip_cli-2.12.0}/tests/fixtures/typescript-project/src/widgets/OrphanWidget.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|