Referenced by7
Labels11

Referencing ideas

IdeaStatusTagsSummaryKatz
checkdone`reqlan check` should run perform the following checks: - ensure all rq [reference] point to real nodes, unless rq ignored with [comment_reference_ignore]. - this tests rqcomments point to real parts of the namespace, that code references exist, and that rq references exists. - report unresolved imports: [check_unresolved_imports]. - report a comment reference with invalid syntax: [code_comment_syntax_errors]. - report a qualified reference whose file is not on disk: [check_qualified_missing_file]. - report a qualified reference whose `.rq` file does not declare the idea: [check_qualified_missing_idea]. - it should really just be a wrapper of the [index] and return the issues ( as a pipe, terminal output, or json ). Issue order: [check_order_by_target]. Sparse wildcards: [check_wildcard_sparse] via flags [check_wildcard_zero] and [check_wildcard_one]. Path globs: [check_glob_patterns]. Skip missing targets: [check_skip_targets] [check_skip_gitignored_targets]. CLI: ["../cli/cli_package.rq".commands]. MCP: ["../extension/agent/skills-and-mcp.rq".mcp_check]. CI: [check_meta_implementation]. Site demo: ["../site/site.rq".broken_links_showcase].1.000
check_wildcard_onedone`check_references` flag `wildcard_one` ( default `warn` ) controls a ["../reference_types.rq".wildcard_reference] that matches exactly 1 idea. 1 match means the pattern is too narrow — use a concrete [reference] instead. `warn` — emit the row with severity `warning` and match count 1. `error` — emit the row with severity `error` and match count 1. `off` — omit the row. CLI: `--wildcard-one <warn|error|off>` ( ["../cli/cli_package.rq".commands] ). API: `AnalysisApi.check({ wildcardOne })`. Related: [check] [check_wildcard_sparse] [check_wildcard_zero] ["../language/imports.rq".wildcard_references]0.507
check_wildcard_sparsedoneA ["../reference_types.rq".wildcard_reference] is for many matches. [check] recounts each wildcard against the full idea catalog, not the stored edges, so files that the indexer visited first still get the true match count. How 0 - match and 1 - match rows are handled is controlled by [check_wildcard_zero] and [check_wildcard_one] ( both default `warn` ). Ignore a site with [comment_reference_ignore]. The language server already warns when a wildcard matches nothing ( ["../language/imports.rq".wildcard_references] ); it also warns when the match count is 1. Related: [check] ["../language/imports.rq".wildcard_references]0.417
import_keywordsThe keywords import, from, and as are reserved for import statements. Import keywords may also appear as ordinary words in idea body text when not at statement start.0.047
wildcard_referencesdoneQualified path + idea-pattern references match multiple ideas across files. Surface forms: bracket `[…]` and wikilink `[[…]]` ( same `WildcardReference` target ). Path is a quoted string that may include shell-style globs ( `*`, `**`, `?` ) and `@/` import-root aliases ( [configuration_import_root_alias] ). Relative globs resolve against the defining document directory; `.` / `..` segments are collapsed before matching. Idea pattern is an unquoted `WILDCARD_NAME` that must contain at least one `*` or `?` Exact quoted-path plus idea stays ["./syntax.rq".reference_qualified]. Matching uses anchored globs ( not full JS regex ): path `*` is one segment, `**` crosses segments; idea `*` / `?` match within the idea name. Zero matches produce a warning diagnostic. One match also produces a warning — a wildcard is for many ideas; use a concrete ["./syntax.rq".reference_qualified] when only one idea matches ( ["../core_analysis/check.rq".check_wildcard_one] ). Path segment `/**/` must not be lexed as an empty block comment — see ["./syntax.rq".comments]. Lexer note: `ID` is a prefix of many wildcard names ( `import_` vs `import_*` ); the token builder sets `ID.LONGER_ALT = WILDCARD_NAME` so `import_*` is one token. Body prose `*` tokens are accepted via `WILDCARD_NAME` in PlainText so ordinary `*` characters still parse. Without that longer-alt, a live wildcard inside a block body can fail Idea recovery and leave later top-level ideas unindexed ( soft mtime sync will not rebuild until the `.rq` file changes ). Navigation does not emit N LocationLinks. A document-link click opens `reqlan.openWildcardReference` with `{ pathPattern, ideaPattern, fromUri }` ( see [wildcard_references_webview] ). Go-to-definition does not open that panel. Indexing fans out per ["../indexer/indexer.rq".wildcard_reference_edges] ( owned under ["../indexer/indexer.rq".index] ): native extract writes one `wildcard_reference` edge per catalog match; empty catalog / zero matches → one unresolved edge of that kind labeled with the pattern text. ["../core_analysis/check.rq".check] handles 0 - match and 1 - match fan-out through ["../core_analysis/check.rq".check_wildcard_zero] and ["../core_analysis/check.rq".check_wildcard_one] ( ["../core_analysis/check.rq".check_wildcard_sparse] ). Ideas Summary graph toggles those edges via ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle]. The server can answer `reqlan/wildcardReferenceAt`. Go-to-definition does not call it. Related: ["./syntax.rq".reference_embedding], ["./syntax.rq".reference_brackets], ["./syntax.rq".reference_wikilink], ["../indexer/indexer.rq".wildcard_reference_edges], ["../core_analysis/check.rq".check_wildcard_sparse], ["../core_analysis/check.rq".check_wildcard_zero], ["../core_analysis/check.rq".check_wildcard_one]. Illustrative forms ( fenced so this file does not embed live wildcards ):0.486
wildcard_references_webviewdoneA click on the command document link for a [wildcard_references] target runs `reqlan.openWildcardReference` and opens a dedicated **wildcard matches** webview ( beside the editor ) that lists: - Stats: matching idea count, distinct file count, and @ status breakdown - Requirements: each matching idea with name, status, path, and summary ( click opens the idea ) - Files: each matching file with idea count ( click opens the file ) Secondary action **Open in Search** seeds the activity-bar ["../extension/local-context/activitybar-panels/search.rq".search_pane_seed] via `focusIdeaSearch` with: - `query`: idea pattern with glob meta softened for fuzzy search ( `import_*` → `import` ) - `pathFilter`: the path glob as a hard AND filter ( [idea_path_filter] ) Payload builder: `buildWildcardMatchesPayload` filters the index catalog by idea glob + path filter. Protocol for the matches panel is inline host ↔ webview ( `init` / `openIdea` / `openFile` / `openSearch` ). The document-link target is the command URI. Go-to-definition does not open the panel. Highlighting of the source reference must stay link-styled — see ["../extension/language/syntax/features-syntax.rq".syntax_highlighting] and ["../extension/language/syntax/features-syntax-highlighting.rq".wildcard_reference_highlighting].0.199
commentsdoneLine 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

Reference labels

"../../packages/language/test/wildcard-references.test.ts", "../../packages/language/test/wildcard-references.test.ts:e2e: ** path glob matches nested fixture files", "../../packages/language/test/wildcard-references.test.ts:e2e: imports.rq captures wildcard ideas with status and implementation", "../../packages/language/test/wildcard-references.test.ts:e2e: tokenize → parse → resolve → document link → definition → command args", "../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches nothing", "../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches only one idea", ../../packages/language/test/wildcard-references.test.ts, ../../packages/language/test/wildcard-references.test.ts:e2e: imports.rq captures wildcard ideas with status and implementation, ../../packages/language/test/wildcard-references.test.ts:e2e: tokenize → parse → resolve → document link → definition → command args, ../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches nothing, ../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches only one idea