From ad58c10507504ce3287117c583dbae8d830bd82f Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Fri, 10 Jan 2025 13:00:46 -0700 Subject: [PATCH 1/4] feat(harper.js): added ability to explicitly set config to the default --- harper-wasm/src/lib.rs | 4 ++++ packages/harper.js/src/Linter.test.ts | 12 ++++++++++++ packages/harper.js/src/Linter.ts | 3 +++ packages/harper.js/src/LocalLinter.ts | 6 ++++++ packages/harper.js/src/WorkerLinter/index.ts | 4 ++++ 5 files changed, 29 insertions(+) diff --git a/harper-wasm/src/lib.rs b/harper-wasm/src/lib.rs index 7343462e..a1da7d5a 100644 --- a/harper-wasm/src/lib.rs +++ b/harper-wasm/src/lib.rs @@ -105,6 +105,10 @@ impl Linter { self.lint_group.config.serialize(&serializer).unwrap() } + pub fn fill_lint_config_with_default(&mut self) { + self.lint_group.config.fill_default_values(); + } + pub fn set_lint_config_from_object(&mut self, object: JsValue) -> Result<(), String> { self.lint_group.config = serde_wasm_bindgen::from_value(object).map_err(|v| v.to_string())?; diff --git a/packages/harper.js/src/Linter.test.ts b/packages/harper.js/src/Linter.test.ts index ef708661..e576a8ef 100644 --- a/packages/harper.js/src/Linter.test.ts +++ b/packages/harper.js/src/Linter.test.ts @@ -121,6 +121,18 @@ for (const [linterName, Linter] of Object.entries(linters)) { expect(value).not.toHaveLength(0); } }); + + test(`${linterName} default lint config has no null values`, async () => { + const linter = new Linter(); + + await linter.setLintConfigToDefault(); + + const lintConfig = await linter.getLintConfig(); + + for (const value of Object.values(lintConfig)) { + expect(value).not.toBeNull(); + } + }); } test('Linters have the same config format', async () => { diff --git a/packages/harper.js/src/Linter.ts b/packages/harper.js/src/Linter.ts index 6febf738..ee7a312c 100644 --- a/packages/harper.js/src/Linter.ts +++ b/packages/harper.js/src/Linter.ts @@ -25,6 +25,9 @@ export default interface Linter { /** Get the linter's current configuration. */ getLintConfig(): Promise; + /** Set the linter's current configuration to the official Harper default. */ + setLintConfigToDefault(): Promise; + /** Set the linter's current configuration. */ setLintConfig(config: LintConfig): Promise; diff --git a/packages/harper.js/src/LocalLinter.ts b/packages/harper.js/src/LocalLinter.ts index 8f9031e0..169386f2 100644 --- a/packages/harper.js/src/LocalLinter.ts +++ b/packages/harper.js/src/LocalLinter.ts @@ -84,4 +84,10 @@ export default class LocalLinter implements Linter { await this.initialize(); return this.inner!.get_lint_descriptions_as_json(); } + + async setLintConfigToDefault(): Promise { + await this.initialize(); + + this.inner?.fill_lint_config_with_default(); + } } diff --git a/packages/harper.js/src/WorkerLinter/index.ts b/packages/harper.js/src/WorkerLinter/index.ts index 7710140c..89d825bc 100644 --- a/packages/harper.js/src/WorkerLinter/index.ts +++ b/packages/harper.js/src/WorkerLinter/index.ts @@ -106,6 +106,10 @@ export default class WorkerLinter implements Linter { return JSON.parse(await this.getLintDescriptionsAsJSON()) as Record; } + setLintConfigToDefault(): Promise { + return this.rpc('setLintConfigToDefault', []); + } + /** Run a procedure on the remote worker. */ private async rpc(procName: string, args: any[]): Promise { const promise = new Promise((resolve, reject) => { From 0b4ff28600e87271308b7ee58801c962ff222381 Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Fri, 10 Jan 2025 13:29:52 -0700 Subject: [PATCH 2/4] feat: autogenerate config with button --- .../web/src/lib/DefaultNeovimConfig.svelte | 36 +++++++++++++++++++ .../routes/docs/integrations/neovim/+page.md | 6 ++++ 2 files changed, 42 insertions(+) create mode 100644 packages/web/src/lib/DefaultNeovimConfig.svelte diff --git a/packages/web/src/lib/DefaultNeovimConfig.svelte b/packages/web/src/lib/DefaultNeovimConfig.svelte new file mode 100644 index 00000000..7d9d9b4a --- /dev/null +++ b/packages/web/src/lib/DefaultNeovimConfig.svelte @@ -0,0 +1,36 @@ + + + diff --git a/packages/web/src/routes/docs/integrations/neovim/+page.md b/packages/web/src/routes/docs/integrations/neovim/+page.md index f0c22089..8a150fae 100644 --- a/packages/web/src/routes/docs/integrations/neovim/+page.md +++ b/packages/web/src/routes/docs/integrations/neovim/+page.md @@ -109,6 +109,12 @@ lspconfig.harper_ls.setup { } ``` + + + + By default, `harper-ls` will mark all diagnostics with HINT. If you want to configure this, refer below: From a72695492c18ba7e727458f2f26a5707f1a08309 Mon Sep 17 00:00:00 2001 From: Elijah Potter Date: Tue, 21 Jan 2025 14:20:53 -0700 Subject: [PATCH 3/4] fix(web): appease `eslint` --- packages/web/src/lib/DefaultNeovimConfig.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/web/src/lib/DefaultNeovimConfig.svelte b/packages/web/src/lib/DefaultNeovimConfig.svelte index 7d9d9b4a..97972c2d 100644 --- a/packages/web/src/lib/DefaultNeovimConfig.svelte +++ b/packages/web/src/lib/DefaultNeovimConfig.svelte @@ -1,6 +1,5 @@ - +