Skip to main content

Tcl language server, checker, and metadata toolkit.

Project description

tcl-ls

A Tcl language server, checker, and metadata toolkit implemented in typed Python.

Install

tcl-ls currently targets Python 3.14 or newer.

Install from PyPI with:

python3 -m pip install tcl-ls

You can also download packaged server archives and editor assets from the GitHub Releases page.

This installs three command-line entry points:

  • tcl-ls for the stdio language server
  • tcl-check for batch diagnostics
  • tcl-meta for Tcl metadata-helper workflows

For local development from a checkout, sync the environment once and prefer uv run ... for commands you do not want to install globally:

uv sync

Current Scope

This is an alpha release aimed at early adopters. The server is already useful for diagnostics, navigation, completion, rename, signature help, semantic tokens, and metadata-assisted checking, but it still analyzes Tcl conservatively and does not try to model the full dynamic runtime.

Documentation

Published docs are available at https://lewis6991.github.io/tcl-ls/.

Build the Sphinx docs locally with:

make docs

The rendered site is written to docs/_build/html/index.html and covers getting started, editor and checker workflows, metadata authoring, support, and development notes.

Editor-specific helpers shipped in this repository:

  • editors/vscode for the VS Code extension
  • editors/nvim for the Neovim 0.11+ built-in LSP config

Maintenance

Refresh builtin subcommand metadata with:

python3 scripts/generate_builtin_commands.py

The generator updates meta/tcl8.6/tcl.meta.tcl in place and supports --input, --output, --doc-root, --tcl-doc-series, and --version-label for versioned metadata workflows.

Metadata

Metadata files use the *.meta.tcl suffix and meta command entries:

meta command regexp {args} {
    option -start value
    option -- stop
    bind after-options 3..
}

The optional body is declarative analysis metadata. Current annotations are: option, keyword, subcommand, bind, ref, script-body, source, and package.

Diagnostics

Install the package first so the CLI entry points are available:

python3 -m pip install tcl-ls

Analyze a Tcl file or project tree with:

tcl-check path/to/project

In an interactive terminal, the checker prepares package-scoped workspaces (directories rooted by pkgIndex.tcl), then prints final grouped diagnostics with source context and a finished summary as each workspace is analyzed. Use --color=always|never|auto and --context-lines=N to tune the terminal output.

To inspect the current diagnostics emitted for tcllib, use:

make check-tcllib

Pass extra checker flags through make with:

make check-tcllib TCL_CHECK_ARGS="--context-lines=1 --fail-on-diagnostics"

Project-local config can live in tcllsrc.tcl. Supported commands are:

plugin-path .tcl-ls/sample.tcl
lib-path ../tcllib

Configured paths are resolved relative to the config file. lib-path roots are scanned for pkgIndex.tcl files so external library trees can satisfy package require without moving them into the project.

To build metadata inside a tool-specific Tcl shell, source the bundled helper reported by:

tcl-meta helper-path

Then, inside that tool Tcl shell, write metadata directly with:

tcl-meta build-file output.meta.tcl

For local development in this repository, use uv run ... when you want to run the CLI without installing it first.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tcl_ls-0.2.1.tar.gz (282.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tcl_ls-0.2.1-py3-none-any.whl (200.9 kB view details)

Uploaded Python 3

File details

Details for the file tcl_ls-0.2.1.tar.gz.

File metadata

  • Download URL: tcl_ls-0.2.1.tar.gz
  • Upload date:
  • Size: 282.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tcl_ls-0.2.1.tar.gz
Algorithm Hash digest
SHA256 66132c554254a23d2898cbe5a56d4c5c49d0252cb0b0ee2395d9735334e0d002
MD5 dae2a5f059c4303e6a98d9a3ec541702
BLAKE2b-256 a0140efee8b122e7d4de408b4adbc5867646987d4c7808c6ed19a613ba98f628

See more details on using hashes here.

Provenance

The following attestation bundles were made for tcl_ls-0.2.1.tar.gz:

Publisher: releases.yml on lewis6991/tcl-ls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tcl_ls-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: tcl_ls-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 200.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tcl_ls-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 117f561c545dfdb0f9cd91a2ec9ece505eb0df15733dccc01c42d1d9186e819f
MD5 3918287a3ded3212fbf2aaaf9de1f727
BLAKE2b-256 339dea8f0c3b7cc3572e1d6f351f96dfd1a73f1987260d30020a1e73e8c14c86

See more details on using hashes here.

Provenance

The following attestation bundles were made for tcl_ls-0.2.1-py3-none-any.whl:

Publisher: releases.yml on lewis6991/tcl-ls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page