From 2d73cc3656d027d40aa9593855d6a7acaa77aa26 Mon Sep 17 00:00:00 2001 From: 3gorke Date: Thu, 3 Sep 2026 16:29:17 +0200 Subject: [PATCH] docs: change hover and adr descriptions --- README.md | 2 +- doc/demo/README.md | 7 ++++++- doc/spec/features.md | 4 ++-- doc/spec/requirements.md | 2 +- doc/user-guide/README.md | 18 ++++++++++++++---- doc/user-guide/images/hover.png | Bin 21514 -> 29478 bytes .../src/main/resources/META-INF/plugin.xml | 5 ++++- vscode-extension/README.md | 3 ++- 8 files changed, 30 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index bc56cd4..f60854a 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ explains items, coverage and artifact types. | Feature | What it gives you | |---------------------------------------------------------------------|------------------------------------------------------------------| | [Syntax highlighting](doc/user-guide/README.md#syntax-highlighting) | Item IDs, section keywords and coverage tags in their own colors | -| [Hover documentation](doc/user-guide/README.md#hover-documentation) | Title and description of the item an ID refers to | +| [Hover documentation](doc/user-guide/README.md#hover-documentation) | What the item an ID refers to says, section by section | | [Go to definition](doc/user-guide/README.md#go-to-definition) | From a tag to the item, from an item to everything covering it | | [Find references](doc/user-guide/README.md#find-references) | Every coverage tag in the workspace that covers an item | | [Symbol search](doc/user-guide/README.md#symbol-search) | Items through the editor's workspace symbol search | diff --git a/doc/demo/README.md b/doc/demo/README.md index 7f47e5f..71bcb56 100644 --- a/doc/demo/README.md +++ b/doc/demo/README.md @@ -35,10 +35,15 @@ are colored. ### 2. Hover In `src/CoffeeMaker.java`, hover over the target of the first coverage tag, -which is `dsn~brew-cycle~1`. +which is the implementation of `dsn~brew-cycle~1`. > **Expected:** title and description of the design item appear as a tooltip. +Now hover over `dsn~heat-water~2` two tags further down. + +> **Expected:** below the description the tooltip also shows the item's +**Comment**, the section the specification carries for it. + ### 3. Go to definition a) In the same tag, invoke *Go to Definition* on the target diff --git a/doc/spec/features.md b/doc/spec/features.md index e273a3c..7cdd76a 100644 --- a/doc/spec/features.md +++ b/doc/spec/features.md @@ -15,9 +15,9 @@ The language server lists all coverage tags in the workspace that cover a given Needs: req ## Hover Documentation -feat~hover-documentation~1 +feat~hover-documentation~2 -The language server shows a hover tooltip over a coverage tag. The tooltip contains the specification item's title and description. +The language server shows a hover tooltip over a coverage tag. The tooltip describes the specification item the tag refers to. Needs: req diff --git a/doc/spec/requirements.md b/doc/spec/requirements.md index e6614ab..d4a3814 100644 --- a/doc/spec/requirements.md +++ b/doc/spec/requirements.md @@ -36,7 +36,7 @@ req~hover-specification-item~1 When the user hovers over a coverage tag, the server returns a Markdown response describing the specification item. Covers: -* feat~hover-documentation~1 +* feat~hover-documentation~2 Needs: impl, utest diff --git a/doc/user-guide/README.md b/doc/user-guide/README.md index 5172395..1ece178 100644 --- a/doc/user-guide/README.md +++ b/doc/user-guide/README.md @@ -9,7 +9,7 @@ The [demo walkthrough](../demo/README.md) does exactly that. | Feature | Description | |---------------------------------------------|---------------------------------------------------| | [Syntax highlighting](#syntax-highlighting) | IDs, keywords and tags get their own colors | -| [Hover documentation](#hover-documentation) | Title and description of the referenced item | +| [Hover documentation](#hover-documentation) | What the referenced item says, section by section | | [Go to definition](#go-to-definition) | Between a tag and the item, in both directions | | [Find references](#find-references) | Every tag covering an item | | [Symbol search](#symbol-search) | Find items by ID or title | @@ -39,9 +39,19 @@ own name (`[impl~login~2->...]`) and needed coverage (`[dsn->req~login~1>>impl,u ## Hover documentation -Pointing at a specification item ID shows the title and description of the item -it refers to, wherever the ID appears: in a coverage tag, in a `Covers:` list or -on the declaration itself. +Pointing at a specification item ID shows what the item it refers to says, +wherever the ID appears: in a coverage tag, in a `Covers:` list or on the +declaration itself. + +Title and description come first. Below them the tooltip repeats the sections +the item carries, each behind its keyword: `Rationale:`, `Comment:`, `Depends:` +and `Tags:`, and `Status:` where it is not `approved`. A section the item does +not carry is left out. + +`Needs:` and `Covers:` are missing on purpose. Both say where the item sits in +the trace, which the [code lens](#coverage-code-lens) and +[go to definition](#go-to-definition) answer against the current trace instead +of repeating what the item declares. ![Hover documentation](images/hover.png) diff --git a/doc/user-guide/images/hover.png b/doc/user-guide/images/hover.png index a1951424cd7a598f40163e44fef2498d39766282..a8912045dd5362a24ec433f6e93337ac527da9d1 100644 GIT binary patch literal 29478 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%0DAiWE7ce=j`JJ5K^QB=UUP!gX|2 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 JmrI)X{~xDwdoKV0 literal 21514 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 nOV6Aye0ywV^9;i8mRRS>y+ -
  • Hover documentation: title and description of the referenced specification item
  • +
  • Hover documentation: shows what the referenced specification item says
  • Go to definition: from a coverage tag to the specification item and from an item to all its covering tags
  • Find references: all coverage tags in the workspace that cover a specification item
  • Trace diagnostics: uncovered specification items, links to items that do not exist and duplicate definitions, reported for every file in the project and listed under Project Errors
  • @@ -21,6 +21,9 @@
  • Code completion: specification item IDs in Covers: sections and coverage tag targets
  • Tag skeletons: pressing Ctrl+Space in a comment offers a skeleton such as [impl->...] for every artifact type the workspace needs, including project specific ones
  • +
  • Trace decisions: an architecture decision record written as + MADR can carry a specification item ID + and is then traced like a requirement
  • Ignore file: glob patterns in a .oftignore file in the project root exclude files from all OFT features, on top of the build output and hidden paths that are excluded by default
  • diff --git a/vscode-extension/README.md b/vscode-extension/README.md index 25d44cc..9d6b7c8 100644 --- a/vscode-extension/README.md +++ b/vscode-extension/README.md @@ -2,7 +2,7 @@ Integrates the [OpenFastTrace](https://github.com/itsallcode/openfasttrace) (OFT) language server into VS Code via the built-in Language Server Protocol client. The server understands OFT specification items and coverage tags and provides: -* **Hover documentation**: title and description of the referenced specification item +* **Hover documentation**: shows what the referenced specification item says * **Go to definition**: from a coverage tag to the specification item and from an item to all its covering tags * **Find references**: all coverage tags in the workspace that cover a specification item * **Trace diagnostics**: uncovered specification items, links to items that do not exist and duplicate definitions, reported for every file in the Problems view @@ -15,6 +15,7 @@ Integrates the [OpenFastTrace](https://github.com/itsallcode/openfasttrace) (OFT * **Syntax highlighting**: specification item definitions, section keywords and coverage tags via semantic tokens * **Code completion**: specification item IDs in `Covers:` sections and coverage tag targets * **Tag skeletons**: invoking completion manually in a comment offers a skeleton such as `[impl->...]` for every artifact type the workspace needs, including project specific ones +* **Trace decisions**: an architecture decision record written as [MADR](https://github.com/adr/madr) can carry a specification item ID and is then traced like a requirement * **Ignore file**: glob patterns in a `.oftignore` file in the workspace root exclude files from all OFT features, on top of the build output and hidden paths that are excluded by default The server starts automatically when a supported file is opened. No configuration is required.