Cluster detail
reqlan rq/language
Ideas located under folder reqlan rq/language.
folder
52 ideas
6 files
| Idea | File | Status | Summary |
|---|---|---|---|
| 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] |
Initialising graph…