Skip to content

fix(vscode-plugin): ignore non-existent ".git" files, support untitled/unsaved files on VS Code #927

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 19, 2025

Conversation

kiding
Copy link
Contributor

@kiding kiding commented Mar 18, 2025

Issues

Fixes #487. Fixes #382.

Description

This PR restricts clientOptions.documentSelector to the file and untitled scheme, and changes load_file_dictionary to always succeed on the untitled scheme. This will prevent the non-existent .git files from showing up in Problems since they use gitfs scheme1, and make Harper work on untitled/unsaved files. HarperAddToFileDict should fail as expected.

VS Code's documentation2 suggests there may be other schemes like untitled, http, ftp, etc. Harper never worked with untitled with an error saying ERROR harper_ls::backend: Unable to generate the file dictionary. Harper's file_dict_name assumes url is a file path, so this shouldn't break any preexisting feature.

Demo

N/A

How Has This Been Tested?

To test for untitled: open a new document, type Errorz, check Output, see no error. one error saying Did you mean to spell “Errorz” this way?.
To test for .git:

mkdir test && cd test
git init
echo 'Errorz' > test.txt
git add test.txt
code .

Check Problems, see no error for test.txt.git.

Checklist

  • I have performed a self-review of my own code
  • I have added tests to cover my changes

Footnotes

  1. https://github.com/microsoft/vscode/pull/86674

  2. https://code.visualstudio.com/api/references/document-selector

Copy link
Collaborator

@mcecode mcecode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for addressing this issue! LGTM, just a few nitpicks.

@mcecode
Copy link
Collaborator

mcecode commented Mar 18, 2025

Just to note, if this is merged, we may also want to close #382 as not planned or won't fix since this would stop the VS Code extension from sending untitled files to harper-ls, which would prevent "Unable to generate the file dictionary." errors from occurring when opening untitled files but also will stop us from being able to support them going forward.

@kiding
Copy link
Contributor Author

kiding commented Mar 18, 2025

Done! Thank you.

@kiding kiding changed the title fix(vscode-plugin): restrict document scheme to file, ignore non-existent ".git" files fix(vscode-plugin): ignore non-existent ".git" files, support untitled/unsaved files on VS Code Mar 18, 2025
@kiding
Copy link
Contributor Author

kiding commented Mar 18, 2025

@mcecode Decided to add the untitled support as well. load_file_dictionary returns an empty one when it encounters the untitled scheme; same behavior as there is no file dictionary for a given file. HarperAddToFileDict and save_file_dictionary would fail as expected.

@elijah-potter
Copy link
Collaborator

@kiding, does that mean unsaved documents (i.e. blank buffers that aren't on-disk) will now work for text editors other than VS Code?

@mcecode
Copy link
Collaborator

mcecode commented Mar 19, 2025

does that mean unsaved documents (i.e. blank buffers that aren't on-disk) will now work for text editors other than VS Code?

Only if they support the same URI scheme that VS Code uses which is "untitled".

Copy link
Collaborator

@mcecode mcecode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @kiding!

@kiding
Copy link
Contributor Author

kiding commented Mar 19, 2025

@elijah-potter Checked with the other supported editors, and it looks like it's a VS Code-specific behavior/change.

  • Obsidian: Works since it always saves a file.
  • Neovim: Doesn't work due to a possible bug on Neovim's end.
    • For an unsaved buffer, the URL received by harper-ls is file:///.
      • It is actually file://, but the path probably defaults to /.
    • It seems Neovim fails to find which buffer is file://.
      • :lua print(vim.uri_from_bufnr(1)) returns file:// which is expected.
      • :lua print(vim.uri_to_bufnr("file://")) returns 2 which is wrong, then Neovim opens the directory listing for / at buffer 2.
  • Helix: Doesn't work since it doesn't spawn harper-ls before saving to a file.
  • Emacs: Doesn't work since it doesn't call didOpen and subsequent requests before saving to a file.
  • Zed: Doesn't work since it doesn't start language servers before saving to and opening the file.

@elijah-potter elijah-potter added this pull request to the merge queue Mar 19, 2025
Merged via the queue into Automattic:master with commit a32ea2b Mar 19, 2025
22 checks passed
@mcecode mcecode mentioned this pull request Mar 23, 2025
2 tasks
@kiding kiding deleted the document-file-scheme branch March 24, 2025 05:09
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Mar 24, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [Automattic/harper/harper-ls](https://github.com/Automattic/harper) | minor | `v0.24.0` -> `v0.26.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>Automattic/harper (Automattic/harper/harper-ls)</summary>

### [`v0.26.0`](https://github.com/Automattic/harper/releases/tag/v0.26.0)

[Compare Source](Automattic/harper@v0.25.1...v0.26.0)

#### What's Changed

-   docs: fix user dictionary by [@&#8203;kit494way](https://github.com/kit494way) in Automattic/harper#893
-   feat: mask out comments beginning with spellchecker:ignore by [@&#8203;grantlemons](https://github.com/grantlemons) in Automattic/harper#861
-   feat(harper.js): export both binary and inlinedBinary for different runtimes by [@&#8203;Asuka109](https://github.com/Asuka109) in Automattic/harper#607
-   feat: linter for "as far back as" to replace "as early back as" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#889
-   feat: flag "explanation mark/point" instead of "exclamation" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#895
-   feat: correct "in anyway" to "in any way" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#894
-   build(deps): bump [@&#8203;babel/helpers](https://github.com/babel/helpers) from 7.26.9 to 7.26.10 in /packages by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#899
-   fix: two spelling mistakes based on homophones by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#886
-   feat: allow blank lines and comments in `dictionary.dict` by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#756
-   docs: fix typo [#&#8203;906](Automattic/harper#906) by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#912
-   hotfix(core): properly store spans in `PatternLinter` cache by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#926
-   Dictionary curation 2025 03 12 by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#902
-   Dialect prototyping by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#925
-   feat: insert newline automatically in `just addnoun` by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#931
-   docs: fix 3 grammar mistakes by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#933
-   feat: linter for "each and everyone" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#923
-   feat: expand the "get rid off" lint to cover "get ride of" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#900
-   fix(vscode-plugin): ignore non-existent ".git" files, support untitled/unsaved files on VS Code by [@&#8203;kiding](https://github.com/kiding) in Automattic/harper#927
-   feat(core): improve assertion to allow overlapping suggestions by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#935
-   build(deps): bump [@&#8203;wordpress/editor](https://github.com/wordpress/editor) from 14.19.0 to 14.20.0 in /packages by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#915
-   build(deps): bump indexmap from 2.7.1 to 2.8.0 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#921
-   build(deps): bump tokio from 1.43.0 to 1.44.1 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#919
-   build(deps-dev): bump [@&#8203;types/node](https://github.com/types/node) from 22.13.9 to 22.13.10 in /packages by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#913
-   build(deps): bump foldhash from 0.1.4 to 0.1.5 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#917
-   feat: correct "along time" to "a long time" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#910
-   Add -able affix to open (openable) by [@&#8203;claydugo](https://github.com/claydugo) in Automattic/harper#930
-   docs: mention hidden library dependencies by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#943
-   feat(core): create new test assertion for `nth` suggestion results by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#942
-   build: migrate to pnpm workspace & biome by [@&#8203;Asuka109](https://github.com/Asuka109) in Automattic/harper#924
-   build(deps): bump serde from 1.0.218 to 1.0.219 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#920
-   build(deps): bump clap from 4.5.31 to 4.5.32 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#946
-   Web improvements by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#944
-   feat: ignore shebang lines by [@&#8203;holmanb](https://github.com/holmanb) in Automattic/harper#947
-   feat(web): add mask-image to header by [@&#8203;Asuka109](https://github.com/Asuka109) in Automattic/harper#951
-   fix(core): reduce ambiguity for `AvoidContraction` by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#941
-   chore: add comments describing major sections by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#952

#### New Contributors

-   [@&#8203;kit494way](https://github.com/kit494way) made their first contribution in Automattic/harper#893
-   [@&#8203;holmanb](https://github.com/holmanb) made their first contribution in Automattic/harper#947

**Full Changelog**: Automattic/harper@v0.25.1...v0.26.0

### [`v0.25.1`](https://github.com/Automattic/harper/releases/tag/v0.25.1)

[Compare Source](Automattic/harper@v0.25.0...v0.25.1)

#### What's Changed

-   docs(ls): give example config that disables `sentence_capitalization` by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#879
-   fix(core): indexing problem in Regexish work by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#883
-   Just getforms improvements by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#862
-   Dictionary curation 2025 03 11 by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#884
-   fix(core): insert paragraph breaks after code blocks by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#882

**Full Changelog**: Automattic/harper@v0.25.0...v0.25.1

### [`v0.25.0`](https://github.com/Automattic/harper/releases/tag/v0.25.0)

[Compare Source](Automattic/harper@v0.24.0...v0.25.0)

#### What's Changed

-   docs: update integrations section by [@&#8203;mcecode](https://github.com/mcecode) in Automattic/harper#755
-   Typst Corrections by [@&#8203;grantlemons](https://github.com/grantlemons) in Automattic/harper#442
-   refactor: add comments to `just addnoun` and tweak logic by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#605
-   feat: implements [#&#8203;841](Automattic/harper#841) by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#842
-   Add WordPress Plugin Documentation and Demo by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#838
-   feat: add `just newest-dict-changes` by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#701
-   Spellcheck improvements by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#844
-   fix: add missing "gotten rid off" to other "rid off" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#840
-   Rules page improvements by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#843
-   build(deps): bump axios from 1.8.1 to 1.8.2 in /packages by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#845
-   Regexish by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#669
-   fix: fall back to `grep` when `rg` is not available by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#848
-   feat: flag "monumentous" and offer "momentous" and "monumental" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#864
-   build(deps-dev): bump svelte-check from 4.1.4 to 4.1.5 in /packages by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#874
-   build(deps): bump typst-syntax from 0.13.0 to 0.13.1 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#867
-   build(deps-dev): bump typescript from 5.7.3 to 5.8.2 in /packages by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#871
-   build(deps-dev): bump autoprefixer from 10.4.20 to 10.4.21 in /packages by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#873
-   Dictionary curation 2025 03 08 by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#860
-   feat: add many variants of "change of tact"->"tack" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#852
-   feat: implement [#&#8203;525](Automattic/harper#525) (worse/worst confusion) by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#856
-   build(deps): bump cached from 0.54.0 to 0.55.1 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#868
-   build(deps): bump anyhow from 1.0.96 to 1.0.97 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#865
-   Build against an older GLIBC version by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#877
-   Cache busting by [@&#8203;elijah-potter](https://github.com/elijah-potter) in Automattic/harper#876
-   build(deps): bump thiserror from 2.0.11 to 2.0.12 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#866
-   build(deps): bump serde_json from 1.0.139 to 1.0.140 by [@&#8203;dependabot](https://github.com/dependabot) in Automattic/harper#869
-   feat: add a lint to correct "in of itself" to "in and of itself" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#863
-   feat: implement "ticking time clock" by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#851
-   feat: implements [#&#8203;746](Automattic/harper#746) by [@&#8203;hippietrail](https://github.com/hippietrail) in Automattic/harper#855
-   feat(dict): added words to dictionary by [@&#8203;ficcdaf](https://github.com/ficcdaf) in Automattic/harper#847
-   fix: Ignore hex codes inside rgb function calls by [@&#8203;grantlemons](https://github.com/grantlemons) in Automattic/harper#857
-   feat: Added Linux musl compilations by [@&#8203;kiding](https://github.com/kiding) in Automattic/harper#878

#### New Contributors

-   [@&#8203;kiding](https://github.com/kiding) made their first contribution in Automattic/harper#878

**Full Changelog**: Automattic/harper@v0.24.0...v0.25.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOTIuMCIsInVwZGF0ZWRJblZlciI6IjM5LjIxMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

VSCode: Showing problems for nonexistent .git files VSCode: No diagnostics are provided for untitled/unsaved files
3 participants