File detail
syntax.rq
reqlan rq/language/syntax.rq
| Idea | Status | Tags | Summary |
|---|---|---|---|
| file_suffix | Reqlan requirement documents use the . rq file suffix . | ||
| file_layout | 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. | |
| idea_name | 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. | ||
| simple_idea | 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. | ||
| block_idea | 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. | ||
| main_desription_lists_allowed | - lists are valid in. - so this should not raise any error. s | ||
| ideaset | 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. | ||
| reference_brackets | Single-bracket references use square brackets around a target. Forms include ideaset-only, idea-only, ideaset dot idea, and idea dot attribute targets. | ||
| same_file_reference | [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. | ||
| reference_wikilink | 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. | ||
| reference_qualified | 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_file | 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. | ||
| string_and_reference_apostrophes | strings should use double or single apostrophes interchangeably and support backslash escapes. | ||
| reference_embedding | 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. | ||
| attribute_marker | Attributes are introduced with the @ prefix. Attribute names follow identifier rules. | ||
| attribute_forms | 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 | Marked attributes must be at the start of a line. @ this_is_not_an_attribute | ||
| attribute_values | 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. | ||
| lists | 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. | ||
| comments | 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"] | ||
| comment_reference_ignore | Comment reference ignore syntax uses `//rq-ignore-error`. Comment reference ignore suppresses diagnostics on the immediately following line. | ||
| code_snippets | 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 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. | ||
| string_literals | String literals in import paths and quoted idea names may use double or single quotes. Escaped characters inside strings follow standard backslash escaping. | ||
| naked_strings_in_body | 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. | ||
| markdown_links | markdown style links should be supported. label where label can be anythign and not be treated as reference | ||
| round_brackets | 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. | ||
| subidea1 | hello | ||
| subidea2 | hi, i'm a subidea | ||
| example_ideaset | Ideaset (example_ideaset) | ||
| references_to_subidea | It should be acceptable to reference [example_ideaset.subidea1] | ||
| no_name_idea_safe_warning | 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]. | |
| dash-or_undersore_delimited-idea | it should be possible to use dash or underscore delimited idea names . | ||
| name_only_ideas_it_should_be_possible_to_use_name_only_ideas_without_a_body |
Initialising graph…