tcl-ls 0.2.1__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.
- tcl_ls-0.2.1/.github/workflows/ci.yml +42 -0
- tcl_ls-0.2.1/.github/workflows/pages.yml +57 -0
- tcl_ls-0.2.1/.github/workflows/release-assets.yml +201 -0
- tcl_ls-0.2.1/.github/workflows/releases.yml +114 -0
- tcl_ls-0.2.1/.gitignore +20 -0
- tcl_ls-0.2.1/.release-please-manifest.json +3 -0
- tcl_ls-0.2.1/AGENTS.md +17 -0
- tcl_ls-0.2.1/CHANGELOG.md +144 -0
- tcl_ls-0.2.1/LICENSE +21 -0
- tcl_ls-0.2.1/Makefile +108 -0
- tcl_ls-0.2.1/PKG-INFO +172 -0
- tcl_ls-0.2.1/README.md +144 -0
- tcl_ls-0.2.1/STATUS.md +192 -0
- tcl_ls-0.2.1/docs/_static/custom.css +9 -0
- tcl_ls-0.2.1/docs/conf.py +21 -0
- tcl_ls-0.2.1/docs/development.rst +91 -0
- tcl_ls-0.2.1/docs/getting-started.rst +108 -0
- tcl_ls-0.2.1/docs/index.rst +25 -0
- tcl_ls-0.2.1/docs/meta.rst +98 -0
- tcl_ls-0.2.1/docs/reference/cli.rst +64 -0
- tcl_ls-0.2.1/docs/reference/diagnostics.rst +138 -0
- tcl_ls-0.2.1/docs/reference/index.rst +13 -0
- tcl_ls-0.2.1/docs/reference/lsp-features.rst +62 -0
- tcl_ls-0.2.1/docs/reference/meta-syntax.rst +916 -0
- tcl_ls-0.2.1/docs/support.rst +55 -0
- tcl_ls-0.2.1/docs/user-guide/checker.rst +72 -0
- tcl_ls-0.2.1/docs/user-guide/configuration.rst +53 -0
- tcl_ls-0.2.1/docs/user-guide/index.rst +15 -0
- tcl_ls-0.2.1/docs/user-guide/language-server.rst +75 -0
- tcl_ls-0.2.1/docs/user-guide/neovim.md +5 -0
- tcl_ls-0.2.1/docs/user-guide/vscode.md +5 -0
- tcl_ls-0.2.1/editors/nvim/README.md +51 -0
- tcl_ls-0.2.1/editors/nvim/lsp/tcl-ls.lua +5 -0
- tcl_ls-0.2.1/editors/vscode/.npmrc +1 -0
- tcl_ls-0.2.1/editors/vscode/.vscodeignore +14 -0
- tcl_ls-0.2.1/editors/vscode/LICENSE +21 -0
- tcl_ls-0.2.1/editors/vscode/Makefile +59 -0
- tcl_ls-0.2.1/editors/vscode/README.md +101 -0
- tcl_ls-0.2.1/editors/vscode/language-configuration.json +55 -0
- tcl_ls-0.2.1/editors/vscode/package-lock.json +89 -0
- tcl_ls-0.2.1/editors/vscode/package.json +99 -0
- tcl_ls-0.2.1/editors/vscode/scripts/stage_vscode_server.py +30 -0
- tcl_ls-0.2.1/editors/vscode/src/command-line.js +84 -0
- tcl_ls-0.2.1/editors/vscode/src/extension.js +248 -0
- tcl_ls-0.2.1/editors/vscode/test/command-line.test.js +65 -0
- tcl_ls-0.2.1/meta/meta.meta.tcl +304 -0
- tcl_ls-0.2.1/meta/plugins/host.tcl +140 -0
- tcl_ls-0.2.1/meta/tcl8.6/msgcat.meta.tcl +24 -0
- tcl_ls-0.2.1/meta/tcl8.6/tcl.meta.tcl +1878 -0
- tcl_ls-0.2.1/meta/tcl8.6/tcloo.meta.tcl +74 -0
- tcl_ls-0.2.1/meta/tcl8.6/tcltest.meta.tcl +132 -0
- tcl_ls-0.2.1/meta/tcl8.6/tk.meta.tcl +114 -0
- tcl_ls-0.2.1/meta/tcllib/asn.meta.tcl +75 -0
- tcl_ls-0.2.1/meta/tcllib/clay.meta.tcl +55 -0
- tcl_ls-0.2.1/meta/tcllib/cmdline.meta.tcl +22 -0
- tcl_ls-0.2.1/meta/tcllib/doctools/text.meta.tcl +30 -0
- tcl_ls-0.2.1/meta/tcllib/fileutil.meta.tcl +30 -0
- tcl_ls-0.2.1/meta/tcllib/json/write.meta.tcl +27 -0
- tcl_ls-0.2.1/meta/tcllib/json.meta.tcl +9 -0
- tcl_ls-0.2.1/meta/tcllib/log.meta.tcl +12 -0
- tcl_ls-0.2.1/meta/tcllib/logger.meta.tcl +35 -0
- tcl_ls-0.2.1/meta/tcllib/oo/meta.meta.tcl +6 -0
- tcl_ls-0.2.1/meta/tcllib/struct/set.meta.tcl +56 -0
- tcl_ls-0.2.1/meta/tcllib/tepam.meta.tcl +7 -0
- tcl_ls-0.2.1/meta/tcllib/tepam.tcl +68 -0
- tcl_ls-0.2.1/meta/tcllib/testutilities.meta.tcl +34 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/adjust.meta.tcl +27 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/repeat.meta.tcl +9 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/split.meta.tcl +9 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/string.meta.tcl +24 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/tabify.meta.tcl +15 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/textutil.meta.tcl +78 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/trim.meta.tcl +18 -0
- tcl_ls-0.2.1/meta/tcllib/textutil/wcswidth.meta.tcl +12 -0
- tcl_ls-0.2.1/pyproject.toml +96 -0
- tcl_ls-0.2.1/release-please-config.json +35 -0
- tcl_ls-0.2.1/scripts/generate_builtin_commands.py +705 -0
- tcl_ls-0.2.1/scripts/package_release_asset.py +62 -0
- tcl_ls-0.2.1/scripts/platform_target.py +57 -0
- tcl_ls-0.2.1/scripts/publish_release.py +85 -0
- tcl_ls-0.2.1/scripts/release_version.py +132 -0
- tcl_ls-0.2.1/scripts/smoke_pyinstaller_lsp.py +267 -0
- tcl_ls-0.2.1/skills/commit-messages/SKILL.md +34 -0
- tcl_ls-0.2.1/skills/commit-messages/scripts/check_commit_message.py +124 -0
- tcl_ls-0.2.1/src/tcl_lsp/__init__.py +7 -0
- tcl_ls-0.2.1/src/tcl_lsp/__main__.py +11 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/__init__.py +49 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/arity.py +158 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/builtins.py +484 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/control_flow.py +207 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/__init__.py +57 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/ambiguous_command.py +25 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/ambiguous_variable.py +27 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/base.py +74 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/duplicate_proc.py +24 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/helpers.py +267 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/invalid_arguments.py +51 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/invalid_regex.py +151 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/missing_option_value.py +29 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/unknown_option.py +29 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/unknown_subcommand.py +28 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/unreachable_code.py +350 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/unresolved_command.py +25 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/unresolved_package.py +27 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/unresolved_variable.py +27 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/diagnostics/wrong_argument_count.py +90 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/embedded_languages.py +528 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/facts/__init__.py +3 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/facts/collector.py +3143 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/facts/lowering.py +1394 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/facts/parsing.py +302 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/facts/utils.py +300 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/flow/__init__.py +25 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/flow/exprs.py +388 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/flow/variables.py +561 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/index.py +361 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/metadata_commands.py +1698 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/metadata_effects.py +296 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/model.py +264 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/resolver.py +1196 -0
- tcl_ls-0.2.1/src/tcl_lsp/analysis/signature_matching.py +287 -0
- tcl_ls-0.2.1/src/tcl_lsp/cache.py +42 -0
- tcl_ls-0.2.1/src/tcl_lsp/checker/__init__.py +10 -0
- tcl_ls-0.2.1/src/tcl_lsp/checker/cli.py +116 -0
- tcl_ls-0.2.1/src/tcl_lsp/checker/model.py +31 -0
- tcl_ls-0.2.1/src/tcl_lsp/checker/reporting.py +425 -0
- tcl_ls-0.2.1/src/tcl_lsp/checker/service.py +555 -0
- tcl_ls-0.2.1/src/tcl_lsp/common.py +111 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/__init__.py +3 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/document_changes.py +138 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/__init__.py +1 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/completion.py +941 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/cursor_context.py +217 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/document_links.py +81 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/folding.py +107 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/highlights.py +76 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/hover.py +27 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/navigation.py +310 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/rename.py +348 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/signature_help.py +199 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/symbols.py +124 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/features/workspace_symbols.py +125 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/semantic_tokens.py +407 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/server.py +1255 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/state.py +57 -0
- tcl_ls-0.2.1/src/tcl_lsp/lsp/workspace_rebuild.py +576 -0
- tcl_ls-0.2.1/src/tcl_lsp/meta/__init__.py +63 -0
- tcl_ls-0.2.1/src/tcl_lsp/meta_tools.py +5 -0
- tcl_ls-0.2.1/src/tcl_lsp/metadata_paths.py +122 -0
- tcl_ls-0.2.1/src/tcl_lsp/parser/__init__.py +30 -0
- tcl_ls-0.2.1/src/tcl_lsp/parser/expr.py +452 -0
- tcl_ls-0.2.1/src/tcl_lsp/parser/helpers.py +103 -0
- tcl_ls-0.2.1/src/tcl_lsp/parser/model.py +87 -0
- tcl_ls-0.2.1/src/tcl_lsp/parser/parser.py +758 -0
- tcl_ls-0.2.1/src/tcl_lsp/plugins/__init__.py +1 -0
- tcl_ls-0.2.1/src/tcl_lsp/plugins/host.py +681 -0
- tcl_ls-0.2.1/src/tcl_lsp/project/__init__.py +1 -0
- tcl_ls-0.2.1/src/tcl_lsp/project/config.py +100 -0
- tcl_ls-0.2.1/src/tcl_lsp/project/indexing.py +275 -0
- tcl_ls-0.2.1/src/tcl_lsp/project/paths.py +66 -0
- tcl_ls-0.2.1/src/tcl_lsp/project_config.py +17 -0
- tcl_ls-0.2.1/src/tcl_lsp/tools/tcl_meta.tcl +353 -0
- tcl_ls-0.2.1/src/tcl_lsp/workspace.py +15 -0
- tcl_ls-0.2.1/tcl-ls.spec +66 -0
- tcl_ls-0.2.1/tests/__init__.py +1 -0
- tcl_ls-0.2.1/tests/analysis/__init__.py +1 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/__init__.py +1 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_ambiguous_command.py +32 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_ambiguous_variable.py +34 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_contextual_command_diagnostics.py +867 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_duplicate_proc.py +19 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_invalid_regex.py +39 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_malformed_if.py +44 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_malformed_switch.py +44 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_missing_option_value.py +20 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_unknown_option.py +46 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_unknown_subcommand.py +77 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_unreachable_code.py +115 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_unresolved_command.py +27 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_unresolved_package.py +27 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_unresolved_variable.py +43 -0
- tcl_ls-0.2.1/tests/analysis/diagnostics/test_wrong_argument_count.py +83 -0
- tcl_ls-0.2.1/tests/analysis/flow/test_variables.py +308 -0
- tcl_ls-0.2.1/tests/analysis/support.py +76 -0
- tcl_ls-0.2.1/tests/analysis/test_builtins_and_packages.py +819 -0
- tcl_ls-0.2.1/tests/analysis/test_control_flow.py +746 -0
- tcl_ls-0.2.1/tests/analysis/test_metadata_commands.py +887 -0
- tcl_ls-0.2.1/tests/analysis/test_metadata_overrides.py +309 -0
- tcl_ls-0.2.1/tests/analysis/test_resolution.py +762 -0
- tcl_ls-0.2.1/tests/analysis/test_tcl_plugins.py +304 -0
- tcl_ls-0.2.1/tests/conftest.py +40 -0
- tcl_ls-0.2.1/tests/lsp/__init__.py +1 -0
- tcl_ls-0.2.1/tests/lsp/helpers.py +352 -0
- tcl_ls-0.2.1/tests/lsp/test_conversion.py +175 -0
- tcl_ls-0.2.1/tests/lsp/test_document_changes.py +42 -0
- tcl_ls-0.2.1/tests/lsp/test_semantic_tokens.py +528 -0
- tcl_ls-0.2.1/tests/lsp/test_server_features.py +622 -0
- tcl_ls-0.2.1/tests/lsp/test_server_protocol.py +597 -0
- tcl_ls-0.2.1/tests/lsp/test_service_features.py +580 -0
- tcl_ls-0.2.1/tests/lsp/test_workspace_loading.py +861 -0
- tcl_ls-0.2.1/tests/lsp_service.py +75 -0
- tcl_ls-0.2.1/tests/lsp_support.py +63 -0
- tcl_ls-0.2.1/tests/parser/test_parser.py +173 -0
- tcl_ls-0.2.1/tests/parser/test_tcllib_corpus.py +70 -0
- tcl_ls-0.2.1/tests/project_support.py +176 -0
- tcl_ls-0.2.1/tests/test_check.py +695 -0
- tcl_ls-0.2.1/tests/test_generate_builtin_commands.py +75 -0
- tcl_ls-0.2.1/tests/test_main.py +25 -0
- tcl_ls-0.2.1/tests/test_meta_tools.py +149 -0
- tcl_ls-0.2.1/tests/test_publish_release.py +242 -0
- tcl_ls-0.2.1/tests/test_release_version.py +111 -0
- tcl_ls-0.2.1/uv.lock +696 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
commit_lint:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
# Check commit messages
|
|
22
|
+
- uses: webiny/action-conventional-commits@v1.3.0
|
|
23
|
+
|
|
24
|
+
test:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
timeout-minutes: 10
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v6
|
|
30
|
+
|
|
31
|
+
- uses: actions/setup-python@v6
|
|
32
|
+
with:
|
|
33
|
+
python-version: '3.14'
|
|
34
|
+
|
|
35
|
+
- name: Install uv
|
|
36
|
+
run: python -m pip install uv
|
|
37
|
+
|
|
38
|
+
- name: Download tcllib
|
|
39
|
+
run: make tcllib
|
|
40
|
+
|
|
41
|
+
- name: Run test suite
|
|
42
|
+
run: make test
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: github-pages
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v6
|
|
21
|
+
|
|
22
|
+
- uses: actions/setup-python@v6
|
|
23
|
+
with:
|
|
24
|
+
python-version: '3.14'
|
|
25
|
+
|
|
26
|
+
- name: Install uv
|
|
27
|
+
run: python -m pip install uv
|
|
28
|
+
|
|
29
|
+
- name: Configure GitHub Pages
|
|
30
|
+
uses: actions/configure-pages@v5
|
|
31
|
+
|
|
32
|
+
- name: Build docs
|
|
33
|
+
run: make docs
|
|
34
|
+
|
|
35
|
+
- name: Prevent Jekyll processing
|
|
36
|
+
run: touch docs/_build/html/.nojekyll
|
|
37
|
+
|
|
38
|
+
- name: Upload GitHub Pages artifact
|
|
39
|
+
uses: actions/upload-pages-artifact@v4
|
|
40
|
+
with:
|
|
41
|
+
path: docs/_build/html
|
|
42
|
+
|
|
43
|
+
deploy:
|
|
44
|
+
environment:
|
|
45
|
+
name: github-pages
|
|
46
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
47
|
+
permissions:
|
|
48
|
+
contents: read
|
|
49
|
+
pages: write
|
|
50
|
+
id-token: write
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
needs: build
|
|
53
|
+
|
|
54
|
+
steps:
|
|
55
|
+
- name: Deploy to GitHub Pages
|
|
56
|
+
id: deployment
|
|
57
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
name: Release Assets
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
release_version:
|
|
7
|
+
description: Version or label to use in built artifact names.
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
release_channel:
|
|
11
|
+
description: Release channel for packaging and GitHub release handling.
|
|
12
|
+
required: true
|
|
13
|
+
type: string
|
|
14
|
+
release_tag:
|
|
15
|
+
description: Git tag to publish assets against.
|
|
16
|
+
required: true
|
|
17
|
+
type: string
|
|
18
|
+
checkout_ref:
|
|
19
|
+
description: Git ref to build from.
|
|
20
|
+
required: true
|
|
21
|
+
type: string
|
|
22
|
+
create_release:
|
|
23
|
+
description: Create or update the GitHub release before uploading assets.
|
|
24
|
+
required: false
|
|
25
|
+
default: false
|
|
26
|
+
type: boolean
|
|
27
|
+
secrets:
|
|
28
|
+
VSCE_PAT:
|
|
29
|
+
required: false
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
build_assets:
|
|
33
|
+
name: Build assets (${{ matrix.release_platform }})
|
|
34
|
+
runs-on: ${{ matrix.runner }}
|
|
35
|
+
defaults:
|
|
36
|
+
run:
|
|
37
|
+
shell: bash
|
|
38
|
+
|
|
39
|
+
strategy:
|
|
40
|
+
fail-fast: false
|
|
41
|
+
matrix:
|
|
42
|
+
include:
|
|
43
|
+
- runner: ubuntu-latest
|
|
44
|
+
release_platform: linux-x64
|
|
45
|
+
archive_extension: tar.gz
|
|
46
|
+
executable_name: tcl-ls
|
|
47
|
+
vscode_target: linux-x64
|
|
48
|
+
- runner: macos-14
|
|
49
|
+
release_platform: macos-arm64
|
|
50
|
+
archive_extension: tar.gz
|
|
51
|
+
executable_name: tcl-ls
|
|
52
|
+
vscode_target: darwin-arm64
|
|
53
|
+
- runner: windows-latest
|
|
54
|
+
release_platform: windows-x64
|
|
55
|
+
archive_extension: zip
|
|
56
|
+
executable_name: tcl-ls.exe
|
|
57
|
+
vscode_target: win32-x64
|
|
58
|
+
|
|
59
|
+
steps:
|
|
60
|
+
- uses: actions/checkout@v6
|
|
61
|
+
with:
|
|
62
|
+
ref: ${{ inputs.checkout_ref }}
|
|
63
|
+
|
|
64
|
+
- uses: actions/setup-python@v6
|
|
65
|
+
with:
|
|
66
|
+
python-version: '3.14'
|
|
67
|
+
|
|
68
|
+
- name: Install uv
|
|
69
|
+
run: python -m pip install uv
|
|
70
|
+
|
|
71
|
+
- uses: actions/setup-node@v4
|
|
72
|
+
with:
|
|
73
|
+
node-version: '22'
|
|
74
|
+
cache: npm
|
|
75
|
+
cache-dependency-path: editors/vscode/package-lock.json
|
|
76
|
+
|
|
77
|
+
- name: Install project dependencies
|
|
78
|
+
run: uv sync
|
|
79
|
+
|
|
80
|
+
- name: Install extension dependencies
|
|
81
|
+
working-directory: editors/vscode
|
|
82
|
+
run: npm ci
|
|
83
|
+
|
|
84
|
+
- name: Validate extension entrypoint
|
|
85
|
+
working-directory: editors/vscode
|
|
86
|
+
run: npm run check
|
|
87
|
+
|
|
88
|
+
- name: Build tcl-ls
|
|
89
|
+
env:
|
|
90
|
+
PYINSTALLER_CONFIG_DIR: ${{ runner.temp }}/pyinstaller
|
|
91
|
+
run: |
|
|
92
|
+
uv run pyinstaller \
|
|
93
|
+
--noconfirm \
|
|
94
|
+
--clean \
|
|
95
|
+
--distpath build/release \
|
|
96
|
+
--workpath build/pyinstaller \
|
|
97
|
+
tcl-ls.spec
|
|
98
|
+
|
|
99
|
+
- name: Smoke test frozen tcl-ls
|
|
100
|
+
run: |
|
|
101
|
+
uv run python scripts/smoke_pyinstaller_lsp.py \
|
|
102
|
+
"build/release/tcl-ls/${{ matrix.executable_name }}"
|
|
103
|
+
|
|
104
|
+
- name: Archive server build
|
|
105
|
+
run: |
|
|
106
|
+
archive_name="tcl-ls-${{ inputs.release_version }}-${{ matrix.release_platform }}"
|
|
107
|
+
|
|
108
|
+
python scripts/package_release_asset.py \
|
|
109
|
+
--source build/release/tcl-ls \
|
|
110
|
+
--output "dist/${archive_name}.${{ matrix.archive_extension }}" \
|
|
111
|
+
--root-name "$archive_name" \
|
|
112
|
+
--include LICENSE \
|
|
113
|
+
--include README.md
|
|
114
|
+
|
|
115
|
+
- name: Stage bundled server for VS Code
|
|
116
|
+
run: |
|
|
117
|
+
python editors/vscode/scripts/stage_vscode_server.py \
|
|
118
|
+
--source build/release/tcl-ls \
|
|
119
|
+
--destination editors/vscode/server
|
|
120
|
+
|
|
121
|
+
- name: Build VS Code extension
|
|
122
|
+
working-directory: editors/vscode
|
|
123
|
+
env:
|
|
124
|
+
RELEASE_CHANNEL: ${{ inputs.release_channel }}
|
|
125
|
+
run: |
|
|
126
|
+
vsix_path="$GITHUB_WORKSPACE/dist/tcl-ls-vscode-${{ inputs.release_version }}@${{ matrix.vscode_target }}.vsix"
|
|
127
|
+
package_args=(--target "${{ matrix.vscode_target }}" -o "$vsix_path")
|
|
128
|
+
|
|
129
|
+
if [ "$RELEASE_CHANNEL" != "stable" ]; then
|
|
130
|
+
package_args+=(--pre-release)
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
npm exec --package @vscode/vsce -- vsce package "${package_args[@]}"
|
|
134
|
+
|
|
135
|
+
- name: Upload build artifacts
|
|
136
|
+
uses: actions/upload-artifact@v4
|
|
137
|
+
with:
|
|
138
|
+
name: release-assets-${{ matrix.release_platform }}
|
|
139
|
+
path: dist/*
|
|
140
|
+
|
|
141
|
+
publish:
|
|
142
|
+
name: Publish artifacts
|
|
143
|
+
needs: build_assets
|
|
144
|
+
runs-on: ubuntu-latest
|
|
145
|
+
defaults:
|
|
146
|
+
run:
|
|
147
|
+
shell: bash
|
|
148
|
+
permissions:
|
|
149
|
+
contents: write
|
|
150
|
+
env:
|
|
151
|
+
VSCE_PAT: ${{ secrets.VSCE_PAT }}
|
|
152
|
+
|
|
153
|
+
steps:
|
|
154
|
+
- uses: actions/checkout@v6
|
|
155
|
+
with:
|
|
156
|
+
ref: ${{ inputs.checkout_ref }}
|
|
157
|
+
|
|
158
|
+
- uses: actions/setup-python@v6
|
|
159
|
+
with:
|
|
160
|
+
python-version: '3.14'
|
|
161
|
+
|
|
162
|
+
- uses: actions/download-artifact@v4
|
|
163
|
+
with:
|
|
164
|
+
path: ${{ runner.temp }}/release-assets
|
|
165
|
+
|
|
166
|
+
- name: Create or update GitHub release
|
|
167
|
+
env:
|
|
168
|
+
GH_TOKEN: ${{ github.token }}
|
|
169
|
+
run: |
|
|
170
|
+
publish_args=(
|
|
171
|
+
--assets-dir "${{ runner.temp }}/release-assets"
|
|
172
|
+
--release-channel "${{ inputs.release_channel }}"
|
|
173
|
+
--release-tag "${{ inputs.release_tag }}"
|
|
174
|
+
--release-version "${{ inputs.release_version }}"
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
if [ "${{ inputs.create_release }}" = "true" ]; then
|
|
178
|
+
publish_args+=(--create-release)
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
python scripts/publish_release.py "${publish_args[@]}"
|
|
182
|
+
|
|
183
|
+
# Temporarily disabled until the release workflow is validated end to end.
|
|
184
|
+
# - uses: actions/setup-node@v4
|
|
185
|
+
# if: env.VSCE_PAT != ''
|
|
186
|
+
# with:
|
|
187
|
+
# node-version: '22'
|
|
188
|
+
#
|
|
189
|
+
# - name: Publish VS Code extension to Visual Studio Marketplace
|
|
190
|
+
# if: env.VSCE_PAT != ''
|
|
191
|
+
# env:
|
|
192
|
+
# RELEASE_CHANNEL: ${{ inputs.release_channel }}
|
|
193
|
+
# run: |
|
|
194
|
+
# mapfile -t vsix_files < <(find "$RUNNER_TEMP/release-assets" -type f -name '*.vsix' | sort)
|
|
195
|
+
# publish_args=(--skip-duplicate -p "$VSCE_PAT" --packagePath "${vsix_files[@]}")
|
|
196
|
+
#
|
|
197
|
+
# if [ "$RELEASE_CHANNEL" != "stable" ]; then
|
|
198
|
+
# publish_args+=(--pre-release)
|
|
199
|
+
# fi
|
|
200
|
+
#
|
|
201
|
+
# npm exec --package @vscode/vsce -- vsce publish "${publish_args[@]}"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
name: Releases
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
target:
|
|
10
|
+
description: Release automation to run.
|
|
11
|
+
required: true
|
|
12
|
+
type: choice
|
|
13
|
+
default: nightly
|
|
14
|
+
options:
|
|
15
|
+
- nightly
|
|
16
|
+
- stable
|
|
17
|
+
- both
|
|
18
|
+
|
|
19
|
+
concurrency:
|
|
20
|
+
group: releases-${{ github.ref }}
|
|
21
|
+
cancel-in-progress: true
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
release_please:
|
|
28
|
+
name: Release Please
|
|
29
|
+
if: >-
|
|
30
|
+
${{
|
|
31
|
+
github.event_name != 'workflow_dispatch' ||
|
|
32
|
+
github.event.inputs.target == 'stable' ||
|
|
33
|
+
github.event.inputs.target == 'both'
|
|
34
|
+
}}
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
permissions:
|
|
37
|
+
contents: write
|
|
38
|
+
issues: write
|
|
39
|
+
pull-requests: write
|
|
40
|
+
outputs:
|
|
41
|
+
release_created: ${{ steps.release.outputs.release_created }}
|
|
42
|
+
tag_name: ${{ steps.release.outputs.tag_name }}
|
|
43
|
+
version: ${{ steps.release.outputs.version }}
|
|
44
|
+
steps:
|
|
45
|
+
- uses: googleapis/release-please-action@v4
|
|
46
|
+
id: release
|
|
47
|
+
with:
|
|
48
|
+
token: ${{ secrets.RELEASE_PLEASE_TOKEN || github.token }}
|
|
49
|
+
config-file: release-please-config.json
|
|
50
|
+
manifest-file: .release-please-manifest.json
|
|
51
|
+
|
|
52
|
+
publish_stable:
|
|
53
|
+
name: Publish stable assets
|
|
54
|
+
needs: release_please
|
|
55
|
+
if: ${{ needs.release_please.outputs.release_created == 'true' }}
|
|
56
|
+
permissions:
|
|
57
|
+
contents: write
|
|
58
|
+
uses: ./.github/workflows/release-assets.yml
|
|
59
|
+
with:
|
|
60
|
+
release_version: ${{ needs.release_please.outputs.version }}
|
|
61
|
+
release_channel: stable
|
|
62
|
+
release_tag: ${{ needs.release_please.outputs.tag_name }}
|
|
63
|
+
checkout_ref: ${{ needs.release_please.outputs.tag_name }}
|
|
64
|
+
secrets:
|
|
65
|
+
VSCE_PAT: ${{ secrets.VSCE_PAT }}
|
|
66
|
+
|
|
67
|
+
publish_pypi:
|
|
68
|
+
name: Publish to PyPI
|
|
69
|
+
needs:
|
|
70
|
+
- release_please
|
|
71
|
+
- publish_stable
|
|
72
|
+
if: ${{ needs.release_please.outputs.release_created == 'true' }}
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
environment: pypi
|
|
75
|
+
permissions:
|
|
76
|
+
contents: read
|
|
77
|
+
id-token: write
|
|
78
|
+
steps:
|
|
79
|
+
- uses: actions/checkout@v6
|
|
80
|
+
with:
|
|
81
|
+
ref: ${{ needs.release_please.outputs.tag_name }}
|
|
82
|
+
|
|
83
|
+
- uses: actions/setup-python@v6
|
|
84
|
+
with:
|
|
85
|
+
python-version: '3.14'
|
|
86
|
+
|
|
87
|
+
- name: Install uv
|
|
88
|
+
run: python -m pip install uv
|
|
89
|
+
|
|
90
|
+
- name: Build distribution artifacts
|
|
91
|
+
run: make build
|
|
92
|
+
|
|
93
|
+
- name: Publish package distributions to PyPI
|
|
94
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
95
|
+
|
|
96
|
+
publish_nightly:
|
|
97
|
+
name: Publish nightly assets
|
|
98
|
+
if: >-
|
|
99
|
+
${{
|
|
100
|
+
github.event_name != 'workflow_dispatch' ||
|
|
101
|
+
github.event.inputs.target == 'nightly' ||
|
|
102
|
+
github.event.inputs.target == 'both'
|
|
103
|
+
}}
|
|
104
|
+
permissions:
|
|
105
|
+
contents: write
|
|
106
|
+
uses: ./.github/workflows/release-assets.yml
|
|
107
|
+
with:
|
|
108
|
+
release_version: nightly
|
|
109
|
+
release_channel: nightly
|
|
110
|
+
release_tag: nightly
|
|
111
|
+
checkout_ref: ${{ github.sha }}
|
|
112
|
+
create_release: true
|
|
113
|
+
secrets:
|
|
114
|
+
VSCE_PAT: ${{ secrets.VSCE_PAT }}
|
tcl_ls-0.2.1/.gitignore
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
|
|
4
|
+
.venv/
|
|
5
|
+
.cache/
|
|
6
|
+
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
.ruff_cache/
|
|
9
|
+
.coverage
|
|
10
|
+
.coverage.*
|
|
11
|
+
htmlcov/
|
|
12
|
+
|
|
13
|
+
build/
|
|
14
|
+
dist/
|
|
15
|
+
*.egg-info/
|
|
16
|
+
docs/_build/
|
|
17
|
+
|
|
18
|
+
editors/vscode/node_modules/
|
|
19
|
+
editors/vscode/server/
|
|
20
|
+
editors/vscode/*.vsix
|
tcl_ls-0.2.1/AGENTS.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
## Tips
|
|
4
|
+
|
|
5
|
+
- Use `uv` for running python and tooling.
|
|
6
|
+
- Before committing, run `make check`.
|
|
7
|
+
|
|
8
|
+
## Skills
|
|
9
|
+
|
|
10
|
+
Repo-local skills live under `skills/`.
|
|
11
|
+
|
|
12
|
+
Available skills:
|
|
13
|
+
- `commit-messages`: use for creating, amending, or rewording git
|
|
14
|
+
commit messages. File: `skills/commit-messages/SKILL.md`
|
|
15
|
+
|
|
16
|
+
If a task clearly matches a listed skill, read its `SKILL.md` and use
|
|
17
|
+
it for that turn.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## Unreleased
|
|
6
|
+
|
|
7
|
+
## [0.2.1](https://github.com/lewis6991/tcl-ls/compare/v0.2.0...v0.2.1) (2026-06-05)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* **release:** enable PyPI publishing ([f989881](https://github.com/lewis6991/tcl-ls/commit/f989881225fe256d0e7fd2499ff1dad9d1a97e3a))
|
|
13
|
+
|
|
14
|
+
## [0.2.0](https://github.com/lewis6991/tcl-ls/compare/v0.1.0...v0.2.0) (2026-04-27)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* add builtin command metadata ([b1c0e4f](https://github.com/lewis6991/tcl-ls/commit/b1c0e4f4923c09ade10834f84c3fbd1b1bff481b))
|
|
20
|
+
* add packaged releases and editor clients ([5b30540](https://github.com/lewis6991/tcl-ls/commit/5b3054051e670d433224950ee26966ddb32694d8))
|
|
21
|
+
* **analysis:** add ambiguous variable diagnostic ([f05b94d](https://github.com/lewis6991/tcl-ls/commit/f05b94d5bcf43c259efb2ca8fd05c85ffd2adf4a))
|
|
22
|
+
* **analysis:** add arity diagnostics ([8fdde56](https://github.com/lewis6991/tcl-ls/commit/8fdde568609b99ee260016ab74b552b06368086a))
|
|
23
|
+
* **analysis:** add option diagnostics ([40af39c](https://github.com/lewis6991/tcl-ls/commit/40af39c9c0795bbf274a5e6f16c8183fa8071cf2))
|
|
24
|
+
* **analysis:** add Tcl metadata plugins ([cbceb7c](https://github.com/lewis6991/tcl-ls/commit/cbceb7c93318b099de9500e85f212e815d44e4c5))
|
|
25
|
+
* **analysis:** add Tcllib builtin metadata ([746e6a5](https://github.com/lewis6991/tcl-ls/commit/746e6a508d5d0ebc8310422140db8e1e3e3ab887))
|
|
26
|
+
* **analysis:** apply package metadata bindings ([1db88cd](https://github.com/lewis6991/tcl-ls/commit/1db88cdc36afb06b20dd14d51696b5b5c1c92448))
|
|
27
|
+
* **analysis:** detect unreachable code ([017af66](https://github.com/lewis6991/tcl-ls/commit/017af66f5ec108b4f485b2dbd06bee63de5cce20))
|
|
28
|
+
* **analysis:** load Tk and tcltest metadata ([09a47b1](https://github.com/lewis6991/tcl-ls/commit/09a47b16e0094f5e479b6bff612b64d33db8350f))
|
|
29
|
+
* **analysis:** model builtin variable flows ([0552208](https://github.com/lewis6991/tcl-ls/commit/0552208650e7e84d415c26733a4051c027afb37d))
|
|
30
|
+
* **analysis:** resolve if condition refs ([d7ee00f](https://github.com/lewis6991/tcl-ls/commit/d7ee00fa2e6f3d487efe9d9e9dfb29cb49ea003b))
|
|
31
|
+
* **analysis:** support catch builtin ([85b9d58](https://github.com/lewis6991/tcl-ls/commit/85b9d580b64c80949de77fde31b63b796750c68d))
|
|
32
|
+
* **analysis:** track variable value flow ([37bdb07](https://github.com/lewis6991/tcl-ls/commit/37bdb07e810515fd1526712fa1997e1097e146b1))
|
|
33
|
+
* **analysis:** validate if and switch forms ([d2e30ae](https://github.com/lewis6991/tcl-ls/commit/d2e30aed1426d6c176773af63a5052e4f22de7d6))
|
|
34
|
+
* **check:** validate regex patterns ([ff95cad](https://github.com/lewis6991/tcl-ls/commit/ff95cad791473d67b7678b393eebd3dbe9fe2209))
|
|
35
|
+
* **cli:** add tcl-check diagnostics runner ([6cde5c9](https://github.com/lewis6991/tcl-ls/commit/6cde5c9b878996d3a501b62127e6cf4f45a677d6))
|
|
36
|
+
* **diagnostics:** check builtin subcommands ([c18a011](https://github.com/lewis6991/tcl-ls/commit/c18a011742b32177b427dfe68e64a2e049e13823))
|
|
37
|
+
* expand builtin subcommand support ([4e4fb17](https://github.com/lewis6991/tcl-ls/commit/4e4fb17bb2a7e8b032d5eb5f3462e03d273b9c5c))
|
|
38
|
+
* **hover:** enrich proc hovers ([466fe0b](https://github.com/lewis6991/tcl-ls/commit/466fe0b42ed72433423c235bd96115916727b8d4))
|
|
39
|
+
* **hover:** trace imported command origins ([dfce720](https://github.com/lewis6991/tcl-ls/commit/dfce720aedb2d6ec0ea3b93e12a5872e7a70d998))
|
|
40
|
+
* infer packages from pkgIndex ([e66b49c](https://github.com/lewis6991/tcl-ls/commit/e66b49c6331231c7e44cd15862cb0c4847d5d078))
|
|
41
|
+
* load static source dependencies ([d129baf](https://github.com/lewis6991/tcl-ls/commit/d129bafcb2c20e9f1ed2bdf211e93753a83ae0c0))
|
|
42
|
+
* **lsp:** add editor assistance features ([46865a1](https://github.com/lewis6991/tcl-ls/commit/46865a1de156b10abc52450849bf8aaf8f72b117))
|
|
43
|
+
* **lsp:** add more editor methods ([7a2f219](https://github.com/lewis6991/tcl-ls/commit/7a2f21935212e11e6edeb437212c354354152a17))
|
|
44
|
+
* **lsp:** add rename support ([e198943](https://github.com/lewis6991/tcl-ls/commit/e1989432025bb5bffbd153945b2ffe56f3138255))
|
|
45
|
+
* **lsp:** add semantic token deltas ([8ddfc56](https://github.com/lewis6991/tcl-ls/commit/8ddfc56b52e9392fa7b277e6336409bdceea0873))
|
|
46
|
+
* **lsp:** add semantic tokens ([84d2861](https://github.com/lewis6991/tcl-ls/commit/84d28619763b7b64fd7c274e9eea7bbc304cc500))
|
|
47
|
+
* **lsp:** define namespace imports ([e4c064c](https://github.com/lewis6991/tcl-ls/commit/e4c064c62f76e49fe0b812b30599972a3677a8c9))
|
|
48
|
+
* **lsp:** define package require names ([589427a](https://github.com/lewis6991/tcl-ls/commit/589427ae4bb2fef2ceec252139275f58c9106a51))
|
|
49
|
+
* **lsp:** expand completion coverage ([67158d0](https://github.com/lewis6991/tcl-ls/commit/67158d0630600314348a0a4eeab6da3f886f82d2))
|
|
50
|
+
* **lsp:** highlight return keyword ([82df2b6](https://github.com/lewis6991/tcl-ls/commit/82df2b610198ba607557b70ec88312a1175da53d))
|
|
51
|
+
* **lsp:** highlight semicolon separators ([03ea575](https://github.com/lewis6991/tcl-ls/commit/03ea575ab82276e61069b7c521cb2992c12f6a2a))
|
|
52
|
+
* **lsp:** log startup and indexing ([1cac708](https://github.com/lewis6991/tcl-ls/commit/1cac708f57d19783db3b79b2fa62b85d950e8463))
|
|
53
|
+
* **lsp:** report indexing progress ([6d3a0fd](https://github.com/lewis6991/tcl-ls/commit/6d3a0fd6705110170759374147943d7e7dfe6051))
|
|
54
|
+
* **meta:** analyze dict for bodies ([ce717cd](https://github.com/lewis6991/tcl-ls/commit/ce717cd19b8eacb05fa2424af916ffca9af6a93c))
|
|
55
|
+
* **metadata:** add clay definition context ([dd1084a](https://github.com/lewis6991/tcl-ls/commit/dd1084a35dcdd29e112097550b081491240eb7b8))
|
|
56
|
+
* **metadata:** add command value enums ([2e668c1](https://github.com/lewis6991/tcl-ls/commit/2e668c148437fd918e14b2cafc9f772d859b8ddb))
|
|
57
|
+
* **metadata:** redesign metadata DSL ([5acea60](https://github.com/lewis6991/tcl-ls/commit/5acea6014084777b79232507e4f75b9bee1cf082))
|
|
58
|
+
* **metadata:** reuse dynamic plugin clauses ([8c25d08](https://github.com/lewis6991/tcl-ls/commit/8c25d082c7954c3ec639b7ca3ffd6482d00e7f74))
|
|
59
|
+
* **metadata:** support project plugin bundles ([6b369ca](https://github.com/lewis6991/tcl-ls/commit/6b369ca8d8b2a9256d50713cfdea1e96e2870925))
|
|
60
|
+
* **meta:** describe exec options ([0ac82cd](https://github.com/lewis6991/tcl-ls/commit/0ac82cdf9e9d7260050093bff3844e4be1b99369))
|
|
61
|
+
* **parser:** add tcllib corpus coverage ([1759dec](https://github.com/lewis6991/tcl-ls/commit/1759decfa46e838a16266d757a4a62bceff940c8))
|
|
62
|
+
* **parser:** support argument expansion ([d4a65f6](https://github.com/lewis6991/tcl-ls/commit/d4a65f664afb487103cdf1cacdc982924ff4d3c1))
|
|
63
|
+
* **project:** support external Tcl libs ([e28dca2](https://github.com/lewis6991/tcl-ls/commit/e28dca2344ec20db72f7c69649d3c372a5bee4eb))
|
|
64
|
+
* **tcl-meta:** derive proc signatures ([8694cdf](https://github.com/lewis6991/tcl-ls/commit/8694cdfae689ff9f6f7c0223cc0af2c4a10b58a9))
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
### Bug Fixes
|
|
68
|
+
|
|
69
|
+
* add more tcllib command metadata ([45a75c4](https://github.com/lewis6991/tcl-ls/commit/45a75c4e31e8d1b04f5ddddae613cac43a6f2fd0))
|
|
70
|
+
* **analysis:** analyze switch branch bodies ([ef9dd45](https://github.com/lewis6991/tcl-ls/commit/ef9dd4535bd7e0d5f9ec7bbe3c445f7fe923160f))
|
|
71
|
+
* **analysis:** drop return option diagnostics ([1fea62e](https://github.com/lewis6991/tcl-ls/commit/1fea62eb0efd363b5e54e393a145b28dca251d81))
|
|
72
|
+
* **analysis:** handle expanded command args ([ff6f804](https://github.com/lewis6991/tcl-ls/commit/ff6f80478b3924dd30ac62d982965cda3566d23a))
|
|
73
|
+
* **analysis:** infer switch value domains ([2863a39](https://github.com/lewis6991/tcl-ls/commit/2863a395422a3091e2db864e98be5d1f54d5d342))
|
|
74
|
+
* **analysis:** prefer proc implementations ([2889fcd](https://github.com/lewis6991/tcl-ls/commit/2889fcd3de8a100c76bfa88bfe08ff9654ebd00c))
|
|
75
|
+
* **analysis:** preserve braced script offsets ([b8cb935](https://github.com/lewis6991/tcl-ls/commit/b8cb935d22ace37ef1fe0164d21e2dd551d23386))
|
|
76
|
+
* **analysis:** preserve switch branch positions ([67cbf01](https://github.com/lewis6991/tcl-ls/commit/67cbf01a08c08e3dce602cd262797da786cc997e))
|
|
77
|
+
* **analysis:** resolve dynamic array bindings ([923f7f9](https://github.com/lewis6991/tcl-ls/commit/923f7f9598817743608e00f9a49603a17a4b713e))
|
|
78
|
+
* **analysis:** support try handlers ([420e024](https://github.com/lewis6991/tcl-ls/commit/420e024c5885871a1c4528ed08e1e194a8177abb))
|
|
79
|
+
* **analysis:** track Tcl imports and aliases ([5d7684e](https://github.com/lewis6991/tcl-ls/commit/5d7684e0e009657d1eb28087f4009be9ac76b345))
|
|
80
|
+
* **builtins:** override bundled metadata ([a6f0762](https://github.com/lewis6991/tcl-ls/commit/a6f076277cdb76a771f46230ffd84342f05862cd))
|
|
81
|
+
* **check:** use helper effect metadata ([8e45ac8](https://github.com/lewis6991/tcl-ls/commit/8e45ac8943a50da027aa9906ce172180cc4f9503))
|
|
82
|
+
* **ci:** preserve release artifacts on publish ([4124a7f](https://github.com/lewis6991/tcl-ls/commit/4124a7f3730203a5070dcde1c576da941fa262b4))
|
|
83
|
+
* **ci:** roll prerelease into nightly ([c31a76f](https://github.com/lewis6991/tcl-ls/commit/c31a76fc0b656e715ac08ad877e69265ccc0613d))
|
|
84
|
+
* **hover:** omit Tcl builtin import notes ([7238456](https://github.com/lewis6991/tcl-ls/commit/723845645401040145fe5593fab2b33c08af0866))
|
|
85
|
+
* **lsp:** coalesce stale document changes ([006957e](https://github.com/lewis6991/tcl-ls/commit/006957ecca65bb6374cb140e99fd19451c8442a7))
|
|
86
|
+
* **lsp:** complete absolute command prefixes ([2708c1f](https://github.com/lewis6991/tcl-ls/commit/2708c1ffac25a37d6b529bf982168036f1d408e0))
|
|
87
|
+
* **lsp:** scope analysis to document deps ([521d8ca](https://github.com/lewis6991/tcl-ls/commit/521d8ca40b31c79e08c6318eaceb72a229a0f111))
|
|
88
|
+
* **lsp:** show startup notifications ([2d70a89](https://github.com/lewis6991/tcl-ls/commit/2d70a896b30bfe246090b028d07cc64cc9eabfed))
|
|
89
|
+
* **lsp:** streamline workspace loading ([f9e564b](https://github.com/lewis6991/tcl-ls/commit/f9e564b3c59e76bbe0ddb4641545f142bd93855e))
|
|
90
|
+
* **lsp:** sync semantic tokens after edits ([af33789](https://github.com/lewis6991/tcl-ls/commit/af33789fde346edf4777eb59d51dbfa95f84c716))
|
|
91
|
+
* **metadata:** tighten generic meta diagnostics ([12c4f8a](https://github.com/lewis6991/tcl-ls/commit/12c4f8a1af3d6063fcc8f7d816e73d930bf11562))
|
|
92
|
+
* **metadata:** tighten meta syntax rules ([5f707c7](https://github.com/lewis6991/tcl-ls/commit/5f707c7ff0c24c08ed4247b064f4a6f925e3f4d6))
|
|
93
|
+
* **metadata:** tighten override precedence ([2d44ca5](https://github.com/lewis6991/tcl-ls/commit/2d44ca5616b69afd90885fffe2b0aa81b26ee567))
|
|
94
|
+
* **meta:** tighten set arity ([3b6817e](https://github.com/lewis6991/tcl-ls/commit/3b6817e31ef9be978e609e3d0620c359072434ca))
|
|
95
|
+
* reduce more tcllib command noise ([2a0e4a6](https://github.com/lewis6991/tcl-ls/commit/2a0e4a663f7b9b61ae1de70a376ca7d39e2c54ce))
|
|
96
|
+
* reduce tcllib diagnostic noise ([e66c918](https://github.com/lewis6991/tcl-ls/commit/e66c918abcc3e2b0e42db116b3ae5c032ce9bb44))
|
|
97
|
+
* restore frozen server startup ([fe5cae0](https://github.com/lewis6991/tcl-ls/commit/fe5cae044c718e738d137cc626049821e164fff6))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
### Performance Improvements
|
|
101
|
+
|
|
102
|
+
* **analysis:** trim cold metadata work ([701cda2](https://github.com/lewis6991/tcl-ls/commit/701cda2832dde7e6a1b33be533f01df6faf1bf3a))
|
|
103
|
+
* **check:** parallelize workspace checks ([8b4df98](https://github.com/lewis6991/tcl-ls/commit/8b4df987e9e3c6ea0aa7e87e5e5f47f51fdfa66b))
|
|
104
|
+
* **check:** skip lexical span collection ([2e00132](https://github.com/lewis6991/tcl-ls/commit/2e0013250e5eae605fd285071c93043ce7c9e400))
|
|
105
|
+
* **lsp:** match lazy package indexes ([2bf7565](https://github.com/lewis6991/tcl-ls/commit/2bf756533e6bb88a9062d930ca2f11079e3e342c))
|
|
106
|
+
* **lsp:** speed up completion requests ([2364d32](https://github.com/lewis6991/tcl-ls/commit/2364d32e56c938ab55398b7e0f6ce48c891c844c))
|
|
107
|
+
* **metadata:** speed up metadata discovery ([1accc5c](https://github.com/lewis6991/tcl-ls/commit/1accc5c7b610aeca2bd3d9e6aa001de6470f15f9))
|
|
108
|
+
* **parser:** batch plain-text scans ([121890f](https://github.com/lewis6991/tcl-ls/commit/121890f783304b85d09f32210ce73fc14b6795e5))
|
|
109
|
+
* **parser:** scan braced words in chunks ([f7ff12e](https://github.com/lewis6991/tcl-ls/commit/f7ff12ea17231b3aa72933cc978a858ca772aae2))
|
|
110
|
+
* **parser:** track cursor ints locally ([7473a00](https://github.com/lewis6991/tcl-ls/commit/7473a00ce3b03907d3bb47fedc9d2cd045565a07))
|
|
111
|
+
* reduce parser and lowering overhead ([8401de9](https://github.com/lewis6991/tcl-ls/commit/8401de9f473661a11f1b4a1f90f9d1060869aca5))
|
|
112
|
+
* trim embedded analysis parse overhead ([e5fb459](https://github.com/lewis6991/tcl-ls/commit/e5fb459bcde6caa50ebaf9c9ceef0f137c22434b))
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
### Documentation
|
|
116
|
+
|
|
117
|
+
* add commit message skill ([e928a74](https://github.com/lewis6991/tcl-ls/commit/e928a74412e282564e9f2336bfc4138f419c7358))
|
|
118
|
+
* add Sphinx docs site ([7c7c48b](https://github.com/lewis6991/tcl-ls/commit/7c7c48b98eee0e0cb026048fd842d2135b13863f))
|
|
119
|
+
* link hosted docs in README ([20c7e6e](https://github.com/lewis6991/tcl-ls/commit/20c7e6e580fc6563971d87781eff0e8c4be58412))
|
|
120
|
+
* **metadata:** clarify meta syntax wording ([ba69656](https://github.com/lewis6991/tcl-ls/commit/ba6965616e3b144c2394a37050c090bd90056f4b))
|
|
121
|
+
* **metadata:** clarify meta syntax wording ([4f61415](https://github.com/lewis6991/tcl-ls/commit/4f614155ef74bc4cf0336786485d0370b3037a17))
|
|
122
|
+
* **metadata:** polish meta syntax presentation ([5bbc40d](https://github.com/lewis6991/tcl-ls/commit/5bbc40ddbf3d1576ac7f8b2d466af86d8cb29c57))
|
|
123
|
+
* **skill:** keep commit scopes clean ([677074e](https://github.com/lewis6991/tcl-ls/commit/677074e42051dc6c2e3edd93149143a8175dc31c))
|
|
124
|
+
|
|
125
|
+
## 0.1.0 - 2026-03-31
|
|
126
|
+
|
|
127
|
+
Initial public alpha release.
|
|
128
|
+
|
|
129
|
+
### Added
|
|
130
|
+
|
|
131
|
+
- A typed Tcl parser with source spans, syntax diagnostics, and embedded-script
|
|
132
|
+
parsing for core Tcl forms.
|
|
133
|
+
- A conservative static analysis pipeline with diagnostics, hover, definition,
|
|
134
|
+
declaration, implementation, references, rename, completion, signature help,
|
|
135
|
+
semantic tokens, document links, and workspace symbols.
|
|
136
|
+
- Command-line entry points for ``tcl-ls``, ``tcl-check``, and ``tcl-meta``.
|
|
137
|
+
- Bundled Tcl and Tcllib metadata, packaged frozen-server builds, and editor
|
|
138
|
+
integration assets for VS Code and Neovim.
|
|
139
|
+
|
|
140
|
+
### Notes
|
|
141
|
+
|
|
142
|
+
- This release is intentionally alpha-quality. It is already useful for early
|
|
143
|
+
adopters, but Tcl analysis remains conservative and many dynamic language
|
|
144
|
+
features are still outside the current scope.
|
tcl_ls-0.2.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lewis Russell
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|