Members

IdeaFileStatusSummary
attribute_configuration reqlan rq/language/attributes.rq The extension should be largely unopinionated about attributes, allowing users to extend as they see fit. attributes should be as slim as possible to allow for minimised bloat.
anonymous_imports_allowed reqlan rq/language/imports.rq imports can be inlined with this syntax: `["./ontology.rq".attribute]`. i. e. file references import the file as an ideaset.
configuration_import_root_alias reqlan rq/language/imports.rq An import path may start with an alias string, then `/`, then a relative path under that alias's import-root directory. Default alias string: `@`, written as `@/` plus a path relative to the import root. Default import-root directory: the workspace folder that contains the `.rq` file ( not the document directory ). The path after `/` is joined to that alias's import-root directory; the alias itself must be followed by `/` ( e. g. `@reqs` is not aliased ). Alias strings and import-root directories are configured as [configuration.configuration_import_roots] in the applying `.reqlan/config.json` from [configuration.configuration_location]. A configured relative `root` resolves against the base root ( parent of `.reqlan` ); an omitted `root` keeps the workspace-folder default. When several configured aliases could match a path, the longest alias wins. Related path forms: [import_paths]. Completion: ["../extension/syntax/features-syntax.rq".code_completion].
import_error_recovery reqlan rq/language/imports.rq A malformed import must not invalidate the rest of the file. Recoverable invalid `from` shapes parse as local import nodes with a line-level diagnostic: - `from "path" as alias` ( mistaken namespace form ) — suggest `import "path" as alias` or `from "path" import <idea>` - bare `from "path"` — require the `import <idea>` clause - `from` without a quoted path — consume the remainder of the line as an invalid import Later imports and top-level ideas continue to parse and link normally. Same recovery posture for nameless top-level braces: ["./syntax.rq".no_name_idea_safe_warning]. If lex / parse never completes, see ["./parser_lexer.rq".parse_budget_timeout].
import_from reqlan rq/language/imports.rq From-import syntax uses from, a quoted path, import, and an idea name. From-import may include an alias using as.
import_keywords reqlan rq/language/imports.rq The 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.
import_namespace reqlan rq/language/imports.rq Namespace import syntax uses import and a quoted path. Namespace import may include an alias using as. A bracket reference to the alias alone — for example [context_model] — opens the imported file and links only the alias name, like an ideaset namespace. Qualified references through the alias — for example [context_model.builder] — resolve ideas from the imported module.
import_paths reqlan rq/language/imports.rq Import path strings may use relative paths such as. / exampleimport. rq. Import path strings may use paths containing folders. Import path strings may use remote urls such as https: / / company. com / reqs / style. rq. Import path strings may use an import-root alias shorthand such as `@/path/relative/to/import/root`; see [configuration_import_root_alias]. Path forms apply to from-import, namespace import, and qualified import; see [import_from], [import_namespace], and [import_qualified]. Editor completion for path strings is covered by ["../extension/syntax/features-syntax.rq".code_completion].
import_qualified reqlan rq/language/imports.rq Qualified import syntax uses import, a quoted path, a dot, an ideaset name, a dot, and an idea name. Qualified import may include an alias using as.
import_tokenisation reqlan rq/language/imports.rq if an import is given an alias, then the base name is still available as a variable name and should not cause a conflict. Only the alias binds in the importing file; the imported idea's base name may be reused for a local idea. e. g. The same rule applies to qualified imports with `as`. Unaliased imports still bind the idea name and conflict with a local idea of that name. Related: ["../extension/syntax/features-syntax.rq".sensible_alias_support].
lexer_bridge_to_syntax reqlan rq/language/parser_lexer.rq The context-sensitive token builder is what makes [block_idea] and prose braces coexist: structural `{` / `}` are only those that open or close ideas, while [nested_curly_braces] stay body text. [context_sensitive_lexer_scaling] is the performance contract for that bridge; [code_snippets] is the opacity contract so fence interiors never feed the brace timeline.
parse_budget_timeout reqlan rq/language/parser_lexer.rq done Lexing, parsing, or a parse subprocess for a single `.rq` file must finish within a wall-clock budget. 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.
recovery_vs_budget reqlan rq/language/parser_lexer.rq [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.
closing_nested_curly_braces reqlan rq/language/syntax-edge-cases.rq if, for some reason, there is a prose block containing only closing curly braces, they should be escaped and allowed \ } like this.
context_sensitive_lexer_scaling reqlan rq/language/syntax-edge-cases.rq done Context-sensitive token classification for structural / prose braces and top-level import keywords must remain linear in document size. The lexer records brace-depth changes sparsely ( not per-character tables ) and looks them up in log time while tokenising, so workspace language-server initialization and editor re-lexes stay bounded. Code fences are skipped during the brace scan so example braces cannot inflate work or desync depth. Bounded work still assumes the lexer / parser * returns *; unbounded hangs are cut by ["./parser_lexer.rq".parse_budget_timeout].
nested_curly_braces reqlan rq/language/syntax-edge-cases.rq 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.
one_liner_curly_brace_context reqlan rq/language/syntax-edge-cases.rq this should { be acceptable } as well
attribute_forms reqlan rq/language/syntax.rq A bare attribute name after @ denotes a true flag or render keyword. A negated flag uses a trailing bang after the attribute name. A valued attribute uses a space after the attribute name followed by a value. A colon after the attribute name is optional legacy syntax and is not part of the value. Common attributes include plan, status, priority, criticality, confirmation, owner, log, tags, and references with the @ prefix. Any custom attribute name is allowed.
attribute_location reqlan rq/language/syntax.rq Marked attributes must be at the start of a line. @ this_is_not_an_attribute
attribute_marker reqlan rq/language/syntax.rq Attributes are introduced with the @ prefix. Attribute names follow identifier rules.
attribute_values reqlan rq/language/syntax.rq Attribute values may be unstructured scalar text on the same line. Attribute values may be block values in curly braces. Attribute values may be list values in parentheses.
block_idea reqlan rq/language/syntax.rq A block idea is written as a name followed by curly braces containing a body and optional attributes. The first unstructured text in an idea body is the main description when no other body attribute is marked.
code_snippets reqlan rq/language/syntax.rq Idea bodies and block attribute values may embed fenced code blocks delimited by triple backticks. An opening fence is three backticks on a line, optionally followed by a language tag such as python or rq. A closing fence is three backticks on a line. 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] ).
comment_reference reqlan rq/language/syntax.rq Reqlan references may appear in line comments of arbitrary source files. Comment reference syntax uses rq, a colon, a quoted path, a dot, and an idea name.
comment_reference_ignore reqlan rq/language/syntax.rq Comment reference ignore syntax uses `//rq-ignore-error`. Comment reference ignore suppresses diagnostics on the immediately following line.
comments reqlan rq/language/syntax.rq Line comments use double slash through end of line. Block comments use slash-star and star-slash delimiters and may span multiple lines. Meta comments on the same line after content are allowed. Comments should not be triggered in a string context - e. g. a ' https: / / not a comment. com', " https: / / not a comment. com ", or `https://not a comment.com` " / / also not a comment " " " " " " " ["a reference containing '//' that doesn't start a comment"]
dash-or_undersore_delimited-idea reqlan rq/language/syntax.rq it should be possible to use dash or underscore delimited idea names .
example_ideaset reqlan rq/language/syntax.rq Ideaset (example_ideaset)
file_layout reqlan rq/language/syntax.rq incomplete A file begins with zero or more import statements, followed by top-level ideas and ideasets. The file forms an implicit ideaset; its name may default to the filename without the suffix. Front matter syntax is not yet specified.
file_suffix reqlan rq/language/syntax.rq Reqlan requirement documents use the . rq file suffix .
idea_name reqlan rq/language/syntax.rq Idea names are identifiers or double-quoted strings. Unquoted names follow identifier rules and may use letters, digits, underscores, and dashes, for example myidea, my_idea, or dash-or_underscore_delimited-idea. Quoted names allow spaces and other characters when wrapped in double quotes. Idea names must be unique within their ideaset or file. Idea names should not use reserved keywords.
ideaset reqlan rq/language/syntax.rq An ideaset is a parenthesized, comma-separated list of idea names. Ideaset members may be unquoted identifiers or quoted strings. Ideasets act as namespace containers for ideas, nested ideasets, and references.
lists reqlan rq/language/syntax.rq Parenthesized lists contain newline-separated items. Each list item is either a one-liner or a nameless block idea in curly braces. Lists may appear as attribute values and inside block bodies. Named lists use a label followed by a parenthesized item list; the opening parenthesis must be followed by a newline before the first item. Nested lists may appear inside block values or as list items; the opening parenthesis must be followed by a newline before the first item. Inline parentheses in body prose — for example continuous ( " live " ) physics or ( pixelRatio 1, no WebGL ) — are plain text, not lists.
main_desription_lists_allowed reqlan rq/language/syntax.rq - lists are valid in. - so this should not raise any error. s
markdown_links reqlan rq/language/syntax.rq markdown style links should be supported. label where label can be anythign and not be treated as reference
naked_strings_in_body reqlan rq/language/syntax.rq Quoted text in idea bodies, attribute values, and list items is plain prose, not a string literal. Quote characters are preserved in the body text. For example, " Fit to view " in a bullet line is body text. String literals are reserved for import paths, top-level quoted idea names, and quoted paths inside bracket references.
name_only_ideas_it_should_be_possible_to_use_name_only_ideas_without_a_body reqlan rq/language/syntax.rq
no_name_idea_safe_warning reqlan rq/language/syntax.rq done A top-level nameless curly-brace block — `{... }` with no idea name — must not take down the parser or the language server workspace. Parse the block as a recoverable anonymous top-level element, emit a descriptive warning that a name is required before `{`, and continue so later ideas, imports, and links still work. Nameless blocks inside parenthesized lists remain valid list items per [lists]; only top-level nameless blocks warn. Related recovery posture: ["./imports.rq".import_error_recovery]. Block shape: [block_idea]. Fenced examples must stay opaque per [code_snippets] so braces inside snippets cannot desync structural depth. Non-termination ( lex / parse never finishes ) is a different failure mode: ["./parser_lexer.rq".parse_budget_timeout].
reference_brackets reqlan rq/language/syntax.rq Single-bracket references use square brackets around a target. Forms include ideaset-only, idea-only, ideaset dot idea, and idea dot attribute targets.
reference_embedding reqlan rq/language/syntax.rq References may appear inline in description, plan, or other attribute values. References may be declared explicitly in @ references or implied by mention elsewhere. Reference kinds include dependency, incompatible with, applies to, and related to. References may use wildcards and apply to namespaces or ideasets.
reference_file reqlan rq/language/syntax.rq References may target arbitrary files, not only. rq files. File reference syntax uses a bracketed quoted path. Line or line-range references append L # and services after the path inside the brackets. Symbol references append a dot-separated symbol path after the quoted file path.
reference_qualified reqlan rq/language/syntax.rq Cross-file references may qualify an import path or alias with an idea name. Qualified wikilinks may combine a quoted import path with a dot and idea name.
reference_wikilink reqlan rq/language/syntax.rq Double-bracket wikilinks use doubled square brackets around a target. Wikilinks may include an obsidian-style alias pipe with a display label after the target. A bare pipe character in body prose — for example kind: idea | file | selection — is plain text, not wikilink syntax.
references_to_subidea reqlan rq/language/syntax.rq It should be acceptable to reference [example_ideaset.subidea1]
round_brackets reqlan rq/language/syntax.rq Round brackets indicate a list of ideas or attributes. Items may be separated by commas or newlines. Attribute list values may use commas or newlines; see @ example_list_attribute_using_commas and @ example_list_attribute_using_newlines. Parentheses in body prose — including API call shapes like cytoscape. animate ( { fit, easing: ' ease-out-cubic ' } ) — are plain text, not list syntax.
same_file_reference reqlan rq/language/syntax.rq [reference_brackets] should work if the target is either imported, or it is in the same file. Forward references to ideas declared later in the file are valid. Circular references between ideas in the same file are valid. So, this idea should not throw an error.
simple_idea reqlan rq/language/syntax.rq A one-liner idea is written as a name followed by unstructured body text on the same line. A name-only idea is a one-liner with just the name and no body text. One-liner ideas do not use curly braces and do not continue onto subsequent lines.
string_and_reference_apostrophes reqlan rq/language/syntax.rq strings should use double or single apostrophes interchangeably and support backslash escapes.
string_literals reqlan rq/language/syntax.rq String literals in import paths and quoted idea names may use double or single quotes. Escaped characters inside strings follow standard backslash escaping.
subidea1 reqlan rq/language/syntax.rq hello
subidea2 reqlan rq/language/syntax.rq hi, i'm a subidea
syntax_whitespace reqlan rq/language/syntax_whitespace.rq whitespace is not significant in attributes. this line is not an idea, it is part of the main content attribute ["./ontology.rq".attribute]