feat(tcl): add static variable name extraction and array key completion
This adds tooling to statically extract Tcl variable names from syntax trees without evaluating substitutions, enabling better completions for array elements and plain variables. The new helpers are wired into the completion and navigation flows and are supported by tests covering array keys and substitutions. - Introduce variable_names.py with variable_name() and array_key_parts() - Wire static name extraction into completion and symbol indexing - Add tests for array key completion with substitutions
This commit is contained in:
@@ -5,6 +5,7 @@ import attrs
|
||||
from common.load_data import standard_items
|
||||
from tclint.commands.plugins import PluginManager
|
||||
from tclint.syntax_tree import BareWord, Command, QuotedWord, Visitor
|
||||
from tools.variable_names import variable_name
|
||||
|
||||
# Constructing a PluginManager scans entry points, and get_commands() rebuilds
|
||||
# the builtin command set on every call. Semantic tokens are requested often, so
|
||||
@@ -159,6 +160,11 @@ class _Highlighter(Visitor):
|
||||
if routine.contents == "set" and command.args:
|
||||
first_arg = command.args[0]
|
||||
token_info = self._get_token_info(first_arg)
|
||||
if first_arg.contents is None:
|
||||
name = variable_name(first_arg)
|
||||
if name:
|
||||
line, col = first_arg.children[0].pos
|
||||
token_info = ((line - 1, col - 1), len(name))
|
||||
if token_info:
|
||||
(line, col), length = token_info
|
||||
self._append_token((line, col), length, "variable", [TokenModifier.declaration])
|
||||
|
||||
Reference in New Issue
Block a user