Add anchor preview in hover#1150
Conversation
|
I think this sounds helpful. I can find time to review it, though I can't promise I'll be fast. I tried it out, and I have a good initial impression of it. I haven't tested it thoroughly or looked closely at the code yet though. I noticed it was disabled by default, any reason for that? It seems like a helpful feature, and I can't think of drawbacks of enabling it by default. People need to go out of their way to find any features that aren't enabled by default, which could mean it doesn't get used. |
|
As I didn't know if it was a common use case I conservatively set the default to false, but I agree with you that plenty of users might discover this hover by serendipity and enjoy it. For the resolveYamlMapMergeKeys function I guess we would need to limit the number of recursion to prevent performance issue in very large YAML (but I noticed there is a maxItemsComputed, so maybe it's enough to prevent it). Anyway it's good news it looks helpful to you. Thanks for the time you'll invest in testing/reviewing it. |
datho7561
left a comment
There was a problem hiding this comment.
I think this looks pretty good, but for performance reasons I think there should be some limit to prevent infinite recursion (the maxItemsComputed doesn't seem to stop it from computing when there's infinite recursion, so the hover never shows up and it seems to continue computing the result in the background).
Also, I really think this should be enabled by default.
556f7a1 to
235ca9f
Compare
See redhat-developer/yaml-language-server#1150 Draft PR until it gets merged. Signed-off-by: David Thompson <davthomp@redhat.com>
datho7561
left a comment
There was a problem hiding this comment.
Looks good and works well! Thanks, Hugo!
I'm going to resolve the merge conflict, seems it's just in the imports
c0e9b6c to
ba1e078
Compare
See redhat-developer/yaml-language-server#1150 Draft PR until it gets merged. Signed-off-by: David Thompson <davthomp@redhat.com>
See redhat-developer/yaml-language-server#1150 Draft PR until it gets merged. Signed-off-by: David Thompson <davthomp@redhat.com>
See redhat-developer/yaml-language-server#1150 Draft PR until it gets merged. Signed-off-by: David Thompson <davthomp@redhat.com>
|
Ahh shoot it's susceptible to billion laughs. Oh well, not a huge deal. |
TIL billion laughs. If I understand correctly in addition to exploration depth (MAX_MERGE_RECURSION_LEVEL = 10), we should add a limit on width (ie number of aliases resolved at the same level)? In my understanding even we if we put a width like 5 (already restrictive as it looks rather common to have 5 anchors at the same level), we still have 5^9 (1.2M) nodes. Maybe a global maximum of nodes explored would make more sense as it would prevent any performance issue, while working on cases where either depth or width is >=5? |
|
Yeah, the usual solution is to maintain a maximum number of nodes explored, and stop exploring past some upper bound. It's kind of tricky to implement. However, it's an edge case and I don't think it's pressing to address. If the user runs into it all that happens is memory is momentarily eaten up by VS Code/whatever editor until they close it. |
* updated eslint version Signed-off-by: msivasubramaniaan <msivasub@redhat.com> * changelog updated for the release v1.17.0 Signed-off-by: msivasubramaniaan <msivasub@redhat.com> * add language 'github-actions-workflow' * bumped v1.18.0 Signed-off-by: msivasubramaniaan <msivasub@redhat.com> * updated chagelog for the release 1.18.0 Signed-off-by: msivasubramaniaan <msivasub@redhat.com> * bump version 1.19.0 Signed-off-by: msivasubramaniaan <msivasub@redhat.com> * Fix build failure due to prettier error Fixes redhat-developer#1117 Signed-off-by: David Thompson <davthomp@redhat.com> * Stabilize UI tests This PR uses delays in order to get the "YAML custom tags works as expected" test passing consistently. My best guess as to why this works is that it takes bit of time for the setting change to propagate to the language server. Fixes redhat-developer#1119 Signed-off-by: David Thompson <davthomp@redhat.com> * Add formatting option for trailing comma See redhat-developer/yaml-language-server#1063, this PR requires that PR in order to work. Fixes redhat-developer#1112 Signed-off-by: David Thompson <davthomp@redhat.com> * update settings.json as default formatter as yaml Signed-off-by: msivasubramaniaan <msivasub@redhat.com> * send vscode configured language to LS * upstream node * handled locale on YAML LS side * removed yarn dependency and added npm * fixed build issue * removed .yarnrc * check yarn availability * removed yarn * removed yarn completely * removed yarn.lock * check yarn * removed the yarn * add -force instead of -f * removed yarn based on OS * fix winows CI build issue * removed -y(yarn) in the script * CHANGELOG for 1.19.0 Signed-off-by: David Thompson <davthomp@redhat.com> * l10n missing from .vsix 1. The `l10n` folder, which contains all the translations, was not present anywhere in the built .vsix. The translations are required in order to run yaml-language-server, so I copied from yaml-language-server to `dist/l10n`. 2. The location of l10n was listed as `../yaml-language-server/l10n`. This doesn't work if yaml-language-server isn't cloned locally, and doesn't work when running as a .vsix, so I changed it to `./dist/l10n`. 3. During the CI run, npm isn't installing the latest prerelease of yaml-language-server. I added a step to force it to use the latest yaml-language-server. This is important, because the above bugs could have been caught earlier if we were actually testing against the newest yaml-language-server. Fixes redhat-developer#1152 Signed-off-by: David Thompson <davthomp@redhat.com> * Upversion to 1.20.0 * Publish prereleases Fixes redhat-developer#1155 Signed-off-by: David Thompson <davthomp@redhat.com> * Revert "update settings.json as default formatter as yaml" This reverts commit 84d4516. Fixes redhat-developer#1157 Adjusting the user settings automatically was annoying to some users. The main bug fix, which consisted of setting the document selector to include Docker Compose and GitHub Action files, will not be reverted. * Fix prerelease GitHub Action I had the wrong path for the script to bump the version. Signed-off-by: David Thompson <davthomp@redhat.com> * Don't tag prereleases Fixes redhat-developer#1162 Signed-off-by: David Thompson <davthomp@redhat.com> * Add languages `yaml-textmate` & `yaml-tmlanguage` (redhat-developer#1093) * Add languages `yaml-textmate` & `yaml-tmlanguage` * Add to `activationEvents` * Fix scheduled prerelease skipping publish step The prerelease build skipped the publishing step. (See https://github.com/redhat-developer/vscode-yaml/actions/runs/18187139533/job/51773763520) This should prevent the publishing step from being skipped. Signed-off-by: David Thompson <davthomp@redhat.com> * Another fix for prereleases In order to skip tagging the prerelease version, we need to entirely skip the publish to GitHub Releases step. Passing a null tag causes the step to error, which ends the build. Signed-off-by: David Thompson <davthomp@redhat.com> * CHANGELOG for 1.19.1 Signed-off-by: David Thompson <davthomp@redhat.com> * Upversion to 1.20.0 Signed-off-by: David Thompson <davthomp@redhat.com> * feat: Register `ansible` and `ansible-jinja` languages for formatter (redhat-developer#1179) * feat: Register `ansible` and `ansible-jinja` languages for formatter * docs: Add changelog after getting issue number * refactor: Change yaml pattern and release tag to follow upstream * docs: Remove version entry in changelog * docs: Improve changelog * docs: Clear update entry * Don't syntax highlight `1.4.0` as a float Modify the TextMate grammar so that it doesn't count `1.4.0` as a floating point number. The current regular expression was taken from the YAML 1.1 spec, but the regular expression contradicts the examples and explanation and was likely an error. The new regular expression was taken from the YAML 1.2.2 spec. Notably, I believe that `1.4.0` is treated as a string in 1.1 and 1.2 YAML deserializers. It doesn't seem like we'll be able to upstream this change into TextMate, given there's an existing upstream PR to make this change that hasn't been merged. Fixes redhat-developer#901 Signed-off-by: David Thompson <davthomp@redhat.com> * Update CODEOWNERS Muthu is working on other tasks and unfortunately doesn't have time to work on yaml-language-server. For the time being, I've been handling PR reviews and managing issues. Updating the CODEOWNERS to reflect this will automatically request for me to review any new PRs that come in, and will skip pinging Muthu. Signed-off-by: David Thompson <davthomp@redhat.com> * Fix macOS CI UI tests (redhat-developer#1186) * await for progress bar to disappear * Update customTagsTest.ts * Update extensionUITest.ts * Update extensionUITest.ts * Update extensionUITest.ts * Update extensionUITest.ts * Update extensionUITest.ts * increase timeout * Update extensionUITest.ts * Improve documentation for the `yaml.schemas` setting Fixes redhat-developer#1147 Signed-off-by: David Thompson <davthomp@redhat.com> * Settings for "auto-detect Kubernetes crd schema" (redhat-developer#1192) * Settings for "auto-detect Kubernetes crd schema" See redhat-developer/yaml-language-server#1050 Settings to enable/disable the feature and change the repository used to find CRD schemas. Use https://raw.githubusercontent.com/nlamirault/crd-schema-store/refs/heads/main/schemas to test an alternate store of CRD schemas. Signed-off-by: David Thompson <davthomp@redhat.com> * Fix wording of enable setting Co-authored-by: Morgan Chang <shin19991207@gmail.com> * Fix wording of url setting Co-authored-by: Morgan Chang <shin19991207@gmail.com> * Add a quote that somehow got lost Signed-off-by: David Thompson <davthomp@redhat.com> --------- Signed-off-by: David Thompson <davthomp@redhat.com> Co-authored-by: Morgan Chang <shin19991207@gmail.com> * Add new setting to enable/disable anchor hover support See redhat-developer/yaml-language-server#1150 Draft PR until it gets merged. Signed-off-by: David Thompson <davthomp@redhat.com> * Fix running as a web extension, add smoke tests to prevent another regression (redhat-developer#1193) * On web, send a message to the worker containing the translations Translations weren't working at all when running the language server in a web worker. In fact, the server was crashing immediately, since the server was trying to load them from the filesystem. This PR provides the translations to the server using the webworker message passing mechanism. Requires redhat-developer/yaml-language-server#1165 Signed-off-by: David Thompson <davthomp@redhat.com> * Fix web support, add smoke tests 1. Fix schema content resolving when running on web (referencing a schema with a relative path wasn't working) 2. Add smoke tests for desktop using `@vscode/test-cli` 3. Add smoke tests for web using `@vscode/test-web` The smoke tests are very minimal; it loads a YAML file that references a schema using a relative path and verifies the expected diagnostics appear. Signed-off-by: David Thompson <davthomp@redhat.com> --------- Signed-off-by: David Thompson <davthomp@redhat.com> * Fix resolving schema content on web Use a new extension point, which requests schema content by URI instead of filepath. This is helpful, since web instances may use URIs with schemas other than `file://` to refer to the files in the workspace. Add a smoke test. Fixes redhat-developer#1194 Signed-off-by: David Thompson <davthomp@redhat.com> * Remove debug notification Missed removing it before I pushed the code, and it unfortunately got missed in review too. Signed-off-by: David Thompson <davthomp@redhat.com> * CHANGELOG for 1.20.0 Signed-off-by: David Thompson <davthomp@redhat.com> * Upversion to 1.21.0 Signed-off-by: David Thompson <davthomp@redhat.com> * Switch to 1.20.1 Given we're doing a release to address bugs introduced in 1.20.1, I think that we should mark the nexte version as a patch release. Signed-off-by: David Thompson <davthomp@redhat.com> * Fix documentation of `yaml.schemas` setting You can use a single glob or an array of globs. I've updated the documentation and JSON Schema to reflect this. Fixes redhat-developer#1207 Signed-off-by: David Thompson <davthomp@redhat.com> * Replaced the asterisk based file matching with explicit YAML language IDs (redhat-developer#1209) * replaced the asterisk based file matching with explicit YAML language IDs Signed-off-by: Morgan Chang <shin19991207@gmail.com> * remove unsupported language IDs Signed-off-by: Morgan Chang <shin19991207@gmail.com> --------- Signed-off-by: Morgan Chang <shin19991207@gmail.com> * make yaml.validate and yaml.format.enable language overridable Signed-off-by: Morgan Chang <shin19991207@gmail.com> * switch back to 1.21.0 * Add yaml-lint-disable comment to suppress diagnostics per-line Add support for suppressing linter diagnostics on a per-line basis using a yaml-lint-disable comment placed on the line immediately before the one producing the diagnostic. The comment supports three forms: suppress all diagnostics, suppress by message substring, or suppress by multiple comma-separated substrings (case-insensitive). Implemented via LSP client middleware that intercepts diagnostics from the yaml-language-server and filters out suppressed ones before they reach VS Code. Co-authored-by: Cursor <cursoragent@cursor.com> * Refine tests and JSDocs * Remove code * Rename yaml-lint-disable to yaml-language-server-disable * CHANGELOG for 1.21.0 (redhat-developer#1215) Signed-off-by: David Thompson <davthomp@redhat.com> Co-authored-by: Morgan Chang <shin19991207@gmail.com> * Upversion to 1.22.0 Signed-off-by: David Thompson <davthomp@redhat.com> * feat(yaml): add YAML language service features - Implemented YamlLinks service for finding document links in YAML files. - Added YamlOnTypeFormatting service for handling on-the-fly formatting in YAML. - Created YamlRename service to support renaming anchors in YAML documents. - Introduced YamlSelectionRanges service to provide selection ranges for YAML nodes. - Enhanced YamlSchemaService with new schema modification actions. - Added diagnostic filtering capabilities for suppressing specific diagnostics in YAML. - Implemented utility functions for handling YAML AST and scalar types. - Updated telemetry interface for error reporting. - Refactored text buffer utilities for better line handling. - Updated Kubernetes schema URL to the latest version. - Adjusted schema status bar item to work with eBuilder YAML language. * fix: outdate config * feat: add support for .eyaml and .eyml file extensions --------- Signed-off-by: msivasubramaniaan <msivasub@redhat.com> Signed-off-by: David Thompson <davthomp@redhat.com> Signed-off-by: Morgan Chang <shin19991207@gmail.com> Co-authored-by: msivasubramaniaan <msivasub@redhat.com> Co-authored-by: Muthurajan Sivasubramanian <93245779+msivasubramaniaan@users.noreply.github.com> Co-authored-by: Alberto Cavalcante <54247214+albertocavalcante@users.noreply.github.com> Co-authored-by: David Thompson <davthomp@redhat.com> Co-authored-by: RedCMD <33529441+RedCMD@users.noreply.github.com> Co-authored-by: Lanqing Huang <lqhuang@outlook.com> Co-authored-by: Morgan Chang <shin19991207@gmail.com> Co-authored-by: Simon Heather <simon.heather@yulife.com> Co-authored-by: Cursor <cursoragent@cursor.com>

What does this PR do?
It displays the preview of an anchor when hovering it.
What issues does this PR fix or reference?
This is a very rough proposal to check if you would be interested in merging this feature. If this is the case, I'll put more time in writing the test and improving the code based on your remarks.