Code reference detail
patch-textmate.mjs
packages/language/scripts/patch-textmate.mjs
| Idea | Status | Tags | Summary | Katz |
|---|---|---|---|---|
| analytical_rust_port | in-progress | Port ["../core-architecture.rq".analytical_package] to Rust: lexer, parser ( index path ), extractor, SQLite index, search, and export. `@reqlan/analytical` remains the published JS facade ( `createAnalysisRuntime` / `AnalysisApi` / Zustand host state ). Native work lives in a `crates/` Cargo workspace and ships as per-architecture binaries per [distribution.rust_binary_distribution]. The editor language server is [lsp_rust.language_server_rust]. This analytical port does not replace that process. Component plans: [rust_crate_layout], [lexer_rust], [parser_rust], [parser_align], [indexer.indexer_rust], [search_rust], [export_rust], [native_bridge], [cutover]. | 0.243 | |
| comment_span_align | done | On every frozen [golden_corpus] `.rq` file, `//` and `/* … */` comment character ranges must be identical across: - the Langium lexer ( hidden `SL_COMMENT` / `ML_COMMENT` ) - `findCommentSpansInText` C-style spans ( host `#` / triple-quote spans are not `.rq` comments ) - TextMate `comment.line.reqlan` and `comment.block.reqlan` scopes Same-line fences, glob `/**/`, URL `://`, and fenced ` ` ` bodies must not open comments. Mid-line triple backticks are prose. They must not open a fence or hide later ideas. Example: `@reqlan/*` in inline code must not open a block comment. Related: [parser_align], ["../language/syntax.rq".code_snippets], ["../language/syntax.rq".comments], ["../language/syntax-edge-cases.rq".fencing_comments], ["../language/syntax.rq".inline_code]. | 0.141 | |
| complementary_information_rendering | The extension should render computed information inline in the editor as complementary text. Complementary rendering should include resolved references and optionally indirect references behind a toggle. Complementary rendering should not mutate source files unless the user explicitly applies a change. | 0.040 | ||
| editor_reference_activation | done | A file reference and an idea reference have no underline in the resting editor. The editor shows an underline when the user holds Ctrl and the pointer is on that reference. Ctrl + click follows the reference in the active editor. A target in the open file moves the cursor in that editor. A target in another file opens in the active editor group. The editor does not open a second copy of the current file. The editor does not open a browser page for a file or idea reference. Alt + Left is navigate-back. It restores the caret from before go-to-definition. The extension keeps that JUMP on a reqlan stack because Cursor often skips the editor history entry for same-file definition. The stack also records jumps that start in comment-reference host languages ( ["../comment-references/functional-code-comment-references.rq".comment_reference_navigate_back] ). Definition targets prefer an open workspace tab URI so Cursor does not open a detached file copy. The definition target range must move the caret ( not an empty 0: 0 – 0: 0 range ). A click that is already on the declaration name is not a JUMP. The TextMate scope is `meta.link.reqlan`. A `markup.underline` scope forces an underline in the resting editor. `.rq` file and idea references omit `markup.underline` — no resting underline. Comment `rq:[…]` sites add `markup.underline` via the comment injection grammar ( ["../comment-references/functional-code-comment-references.rq".comment_reference_resting_underline] ). A file document link is always underlined, and its `#L` URI opens another editor. The extension does not give the editor a file document link. Ctrl + hover uses the definition request. That request is [reference_goto_definition_speed]. The interactive underline is the lexer token under the cursor: the path string or the idea id from the parser. Definition returns `LocationLink.originSelectionRange` for that token so the editor does not invent a word from brackets or quotes. Path segment names inside a quoted path are not reference tokens. The host does not register a DefinitionProvider for other languages, and does not rescan open source files for this activation. When the engine is rust, the language-server document selector includes all file-scheme documents except the comment-host blocklist, and definition navigates resolved `rq:[…]` sites ( ["../comment-references/functional-code-comment-references.rq".references_in_functional_code_comments], ["../comment-references/functional-code-comment-references.rq".comment_reference_language_blocklist] ). A web URL and a command link ( folder, wildcard ) stay document links. A click on a web URL opens that URL in the browser. Related: [reference_document_links], [non_web_reference_navigation], [reference_goto_definition_speed]. | 0.254 | |
| import_statement_highlighting | done | TextMate highlighting for import lines must colour the whole statement, not only the leading `from` / `import` keyword. After `import` ( and after `from` … `import` ), the quoted path, the `import` / `as` keywords, and idea / alias names must receive scopes — they must not stay default-white while still looking interactive from a path document link alone. Root cause: a short `^\\b(from|import)\\b` match ran before the path patterns and consumed the keyword so the path never scoped. Fix: line-scoped `meta.import.reqlan` begin / end rules that paint path, keywords, and names. Semantic tokens still paint import AST nodes ( and must `return` after handling them ). | 0.064 | |
| same_line_named_block_highlighting | done | TextMate-only highlighting ( no semantic tokens ) must follow the canonical lexer for named `{` / `}`: a top-level `name {}` or `name {hello}` is a complete ["../../../language/syntax.rq".block_idea] on that line. The grammar must close on the same line. It must not leave a block open until a later own-line `}`. An open block swallows later one-liners such as a name-only idea. `name {` at end of line is a multiline block. Close it only on an own-line `}` so matching prose pairs at end of line ( `{{SITE_URL}}` ) stay in the body per ["../../../language/syntax-edge-cases.rq".nested_curly_braces]. `name text {braces}` is a ["../../../language/syntax.rq".simple_idea]. `{` after other body text must not start a block. TextMate idea-name scopes on a file must match the Langium parse of that file. | 0.052 | |
| wildcard_reference_highlighting | done | Bracket and wikilink forms of ["../../../language/imports.rq".wildcard_references] ( `["path/**/*.rq".idea_*]`, `[["path/*.rq".*_pane|label]]` ) must TextMate-scope as `meta.link.reqlan` with the path as `string.other.link.reqlan` — never as `comment.block.reqlan`. The grey " comment " paint happened when `#bracket-references` only allowed ID suffixes, so `/*` inside an unmatched path opened a block comment. Fixes: TextMate `#bracket-references` / wiki path patterns accept `WILDCARD_NAME` suffixes; `#comments` block begin rejects empty slash-star-star-slash; body rules try references before comments. Semantic tokens paint `WildcardReference.pathPattern` as string and `ideaPattern` as variable ( ["./features-syntax.rq".syntax_highlighting] ). Related: ["../../../language/syntax.rq".comments], ["../../../language/imports.rq".wildcard_references_webview]. | 0.079 | |
| syntax_features | The extension should provide language support for. rq files via the lsp. Syntax features should cover ideas, ideasets, imports, references, attributes, comments, and lists. Broken imports and references should be validated and reported in the editor. Go-to-definition and find-references should work for ideas, imports, and cross-file links. Find-references is served by ["../support/language-server-rust.rq".language_server_rust] ( `textDocument/references` ). Autoformatting should be supported for. rq files. | 0.046 | ||
| syntax_highlighting | done | . rq files should receive full syntax highlighting coverage for all reqlan constructs. Semantic token highlighting should distinguish ideas, attributes, references, imports, and keywords. Path + wildcard idea refs ( `["…/*.rq".idea_*]` ) must highlight as links / strings — not comment-grey — see ["./features-syntax-highlighting.rq".wildcard_reference_highlighting]. Import lines must colour path and keywords after `import` / `from` — see ["./features-syntax-highlighting.rq".import_statement_highlighting]. Same-line named braces ( `name {}`, `name {hello}` ) must close in TextMate so later one-liners stay visible — see ["./features-syntax-highlighting.rq".same_line_named_block_highlighting]. | 0.093 | |
| fencing_comments | done | A complete same-line fence keeps `//` and `/*` as prose, not comments. Closed double quotes: " / / this line " contains no comment. Closed backticks: `//this line` contains no comment. Closed backticks with a glob: `@reqlan/*` does not open a block comment. An unclosed backtick is not a fence, so this line ` An unclosed quote is not a fence, so as does " The Langium lexer, the Rust lexer, comment scanners, and TextMate must use this rule. Related: ["./syntax.rq".comments], ["./syntax.rq".inline_code], ["./syntax.rq".naked_strings_in_body], ["../core_analysis/rust_port.rq".comment_span_align]. | 0.078 | |
| nested_curly_braces | if there is a prose block containing curly braces, { such as this one } they should be treated as part of the prose. Matching braces that end a line — including adjacent pairs like { { SITE_URL } } — stay in the body; they must not close the enclosing idea. A lone `}` on its own line still closes the structural block so an unbalanced prose `{` cannot swallow the idea closer. | 0.108 | ||
| code_snippets | Idea bodies and block attribute values may embed fenced code blocks delimited by triple backticks. An opening fence is three backticks as the first non-whitespace characters on a line, optionally followed by a language tag such as python or rq. A closing fence is three backticks as the first non-whitespace characters on a line. Three backticks in the middle of a line are prose. They do not open a fence. Everything between the fences is literal opaque text — it is not parsed as reqlan syntax. Keywords, imports, attributes, braces, and quotes inside a fence are inert for the parser and may be shown as examples without parse errors. Fenced blocks may span multiple lines and preserve their inner content verbatim. Brace-depth tracking must skip fence interiors so example braces cannot desync surrounding structure ( [no_name_idea_safe_warning] ). Related: ["../core_analysis/rust_port.rq".comment_span_align]. | 0.113 | ||
| comments | done | Line comments use `//` through end of line ( hidden `SL_COMMENT` ). Block comments use `/* … */` and may span multiple lines ( hidden `ML_COMMENT` ). Meta comments on the same line after content are allowed ( `keep this // meta` ). Comments must not open inside a string / reference-string context: - Naked body quotes ( ["naked_strings_in_body"] ): a quoted slash-slash that is not a comment, quoted urls, `"../mod/**/*.rq"`. - Reference / import `STRING` paths ( `["…"]`, `from "…" import …` ) — the lexer consumes the whole quoted path as one `STRING`, so neither `//` nor `/*` inside the quotes starts a comment. Example: a file reference whose path text contains slash-slash, `["../extension/**/*.rq".*webview*]`. - URL / path-segment guard: `//` immediately after `:` or `/` is not a line comment. Same-line fences: ["./syntax-edge-cases.rq".fencing_comments] — complete `"…"`, `'…'`, and ` ` ` … ` ` ` spans keep ` Unclosed quote or backtick openers are not fences, so `//` after them is a comment. Comment-range identity across lexer, scanner, and TextMate: ["../core_analysis/rust_port.rq".comment_span_align]. Multiline / glob clash: the empty block form `/**/` is **not** a comment — it is the recursive glob segment used in paths such as `../mod/**/*.rq`. A real block comment needs a non-empty body ( `/* note */`, `/*\n note\n*/` ). The token builder rejects length-4 `/**/` matches; comment-span scanners skip the same sequence so embedded `rq:[…]` discovery stays aligned. Related: [comment_reference_ignore], [string_literals], ["./imports.rq".wildcard_references], ["../core_analysis/rust_port.rq".comment_span_align]. | 0.145 | |
| file_suffix | Reqlan requirement documents use the. rq file suffix. | 0.052 | ||
| inline_code | done | Single-backtick spans ( `…` ) are opaque `INLINE_CODE`. They may show example syntax such as a quoted path plus idea. The grammar does not parse bracket or file references inside the span. Check and the language server must not report those examples as unresolved ["../reference_types.rq".file_reference] or idea refs. Related: [code_snippets], ["../core_analysis/rust_port.rq".comment_span_align]. | 0.165 |
Reference labels
"../../../../packages/language/scripts/patch-textmate.mjs", "../../packages/language/scripts/patch-textmate.mjs", ../../../../packages/language/scripts/patch-textmate.mjs, ../../packages/language/scripts/patch-textmate.mjs