Code reference detail
parser.rs
reqlan rq/language/crates/reqlan-parse/src/parser.rs
| Idea | Status | Tags | Summary | Katz |
|---|---|---|---|---|
| parse_budget_timeout | done | Lexing, parsing, or a parse subprocess for a single `.rq` file must finish within `parseBudgetMs` from ["../../packages/analytical/src/core/defaults.json"]. If it cannot, do not hang the language server or block the rest of the workspace. Surface both a warning ( budget exceeded; semantic features may be incomplete ) and an error ( file left unloaded ) on that document, then continue with other files. Happy path stays in-process ( sync ) for typical file sizes so edits and workspace load stay fast. Killable worker enforcement is used when the input is large, a file previously hit the budget ( sticky escalate ), or a caller forces the worker path; sync throws still become the same incomplete result shape. The open buffer stores that result as an empty model plus diagnostics ( ["../extension/language/support/open-file-sequencing.rq".ast_lifecycle] ). | 0.197 | |
| recovery_vs_budget | [no_name_idea_safe_warning] and [import_error_recovery] keep a *finished* parse usable after local mistakes. They do not help when lex / parse never returns — that failure mode is [parse_budget_timeout]. Workspace load still isolates per-document throws so one bad file cannot abort LSP init; the budget turns non-termination into the same “ leave this file unloaded ” outcome, with diagnostics. | 0.069 | ||
| attribute_namespacing | done | A bracket link `[idea.attribute]` targets one attribute of that idea. The first name is the idea name. The second name is the attribute name. The grammar types that name as an attribute or an idea declaration. `[attribute_namespacing.example]` targets the `example` attribute of this idea. The form `[ideaset.member]` still targets an ideaset member. See [references_to_subidea]. The editor opens the attribute when the first name is an idea. The editor reports an error when that idea has no attribute with the second name. The link target is only that attribute on that idea. HTML export uses the same link form. The export link opens that attribute on the idea page. See [attribute_namespacing.example]. Related: [reference_brackets], [attribute_marker], ["../core_analysis/html_export.rq".html_export_internal_links]. | 0.129 | |
| references_to_subidea | done | It is valid to reference a member of an [ideaset] as `[ideaset.member]`, for example [example_ideaset.subidea1]. The indexer must record that reference on the namespace leaf node. In this example the leaf is [subidea1], not [example_ideaset]. Related: [reference_brackets], [same_file_reference], ["../reference_types.rq".idea_reference], ["../indexer/indexer.rq".index]. | 0.167 | |
| idea-leading-whitespace | A block body can have spaces or tabs before the text. The lexer counts a space and a tab as whitespace. A tab is one whitespace character. The parser does not replace a tab with spaces. The base indent is the whitespace at the start of the first body line. The first body line is the first line of body text in the block. The first body line can start after column 0. The base indent is still the whitespace on that line. A body line with the same whitespace as the base indent has no leading whitespace in the parsed text. A body line keeps the whitespace that remains after the base indent. The parser removes the base indent only when the line starts with that same whitespace. An attribute on its own line stays an attribute. Example: the first body line has four spaces. A later line with four spaces has no leading whitespace. A later line with eight spaces has four spaces in the parsed text. This line has the same four spaces as the first body line. This line has eight spaces. | 0.040 |
Reference labels
attribute_namespacing, idea-leading-whitespace, parse_budget_timeout, recovery_vs_budget, references_to_subidea