From 72e98ac801ea415f9c9e90051232cefc455703f7 Mon Sep 17 00:00:00 2001 From: niekdomi <152265924+niekdomi@users.noreply.github.com> Date: Sat, 21 Mar 2026 16:58:03 +0100 Subject: [PATCH 1/2] Added svelte support --- Cargo.lock | 11 ++++ Cargo.toml | 1 + README.md | 1 + crates/codebook/Cargo.toml | 1 + crates/codebook/src/dictionaries/repo.rs | 4 ++ crates/codebook/src/queries.rs | 9 +++ crates/codebook/src/queries/svelte.scm | 17 ++++++ crates/codebook/tests/test_svelte.rs | 71 ++++++++++++++++++++++++ 8 files changed, 115 insertions(+) create mode 100644 crates/codebook/src/queries/svelte.scm create mode 100644 crates/codebook/tests/test_svelte.rs diff --git a/Cargo.lock b/Cargo.lock index 1972400..c93f5cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -408,6 +408,7 @@ dependencies = [ "tree-sitter-r", "tree-sitter-ruby", "tree-sitter-rust", + "tree-sitter-svelte-ng", "tree-sitter-swift", "tree-sitter-toml-ng", "tree-sitter-typescript", @@ -3050,6 +3051,16 @@ dependencies = [ "tree-sitter-language", ] +[[package]] +name = "tree-sitter-svelte-ng" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef0a71f9cf5e94373cc86c64893630c8a29bb25d3390a248268d08af2165fa37" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "tree-sitter-swift" version = "0.7.1" diff --git a/Cargo.toml b/Cargo.toml index 0922004..467d3bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,6 +61,7 @@ tree-sitter-python = "<0.26.0" tree-sitter-r = "1.1.0" tree-sitter-ruby = "0.23.1" tree-sitter-rust = "<0.25.0" +tree-sitter-svelte-ng = "1.0.2" tree-sitter-swift = "<0.8.0" tree-sitter-toml-ng = "<0.8.0" tree-sitter-typescript = "0.23.2" diff --git a/README.md b/README.md index b537f84..76c35b0 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ Codebook is in active development. As better dictionaries are added, words that | Python | ✅ | | Ruby | ✅ | | Rust | ✅ | +| Svelte | ⚠️ | | Swift | ⚠️ | | TOML | ✅ | | TypeScript | ✅ | diff --git a/crates/codebook/Cargo.toml b/crates/codebook/Cargo.toml index b757a6a..f25c778 100644 --- a/crates/codebook/Cargo.toml +++ b/crates/codebook/Cargo.toml @@ -51,6 +51,7 @@ tree-sitter-rust.workspace = true tree-sitter-swift.workspace = true tree-sitter-toml-ng.workspace = true tree-sitter-typescript.workspace = true +tree-sitter-svelte-ng.workspace = true tree-sitter-vhdl.workspace = true codebook-tree-sitter-typst.workspace = true tree-sitter-yaml.workspace = true diff --git a/crates/codebook/src/dictionaries/repo.rs b/crates/codebook/src/dictionaries/repo.rs index c1356a4..043494a 100644 --- a/crates/codebook/src/dictionaries/repo.rs +++ b/crates/codebook/src/dictionaries/repo.rs @@ -170,6 +170,10 @@ static TEXT_DICTIONARIES: LazyLock> = LazyLock::new(|| { "csharp", "https://raw.githubusercontent.com/streetsidesoftware/cspell-dicts/refs/heads/main/dictionaries/csharp/csharp.txt", ), + TextRepo::new( + "svelte", + "https://raw.githubusercontent.com/streetsidesoftware/cspell-dicts/refs/heads/main/dictionaries/svelte/src/svelte.txt", + ), ] }); diff --git a/crates/codebook/src/queries.rs b/crates/codebook/src/queries.rs index c4b4405..e0be200 100644 --- a/crates/codebook/src/queries.rs +++ b/crates/codebook/src/queries.rs @@ -24,6 +24,7 @@ pub enum LanguageType { R, Ruby, Rust, + Svelte, Swift, TOML, Text, @@ -163,6 +164,13 @@ pub static LANGUAGE_SETTINGS: &[LanguageSetting] = &[ query: include_str!("queries/go.scm"), extensions: &["go"], }, + LanguageSetting { + type_: LanguageType::Svelte, + ids: &["svelte"], + dictionary_ids: &["svelte"], + query: include_str!("queries/svelte.scm"), + extensions: &["svelte"], + }, LanguageSetting { type_: LanguageType::Swift, ids: &["swift"], @@ -289,6 +297,7 @@ impl LanguageSetting { LanguageType::R => Some(tree_sitter_r::LANGUAGE.into()), LanguageType::Ruby => Some(tree_sitter_ruby::LANGUAGE.into()), LanguageType::Rust => Some(tree_sitter_rust::LANGUAGE.into()), + LanguageType::Svelte => Some(tree_sitter_svelte_ng::LANGUAGE.into()), LanguageType::Swift => Some(tree_sitter_swift::LANGUAGE.into()), LanguageType::TOML => Some(tree_sitter_toml_ng::LANGUAGE.into()), LanguageType::Text => None, diff --git a/crates/codebook/src/queries/svelte.scm b/crates/codebook/src/queries/svelte.scm new file mode 100644 index 0000000..50d64ed --- /dev/null +++ b/crates/codebook/src/queries/svelte.scm @@ -0,0 +1,17 @@ +; HTML comments +(comment) @comment + +; Visible text nodes between HTML tags +(text) @string + +; Quoted attribute values — e.g. alt="descriptoin", title="Wellcome" +(quoted_attribute_value) @string + +; JavaScript / TypeScript inside +"#; + let processor = utils::get_processor(); + let misspelled = processor + .spell_check(sample_text, Some(LanguageType::Svelte), None) + .to_vec(); + println!("Misspelled: {misspelled:#?}"); + + assert_eq!(misspelled.len(), 5); + assert!(misspelled.iter().any(|w| w.word == "mesage")); + assert!(misspelled.iter().any(|w| w.word == "Helo")); + assert!(misspelled.iter().any(|w| w.word == "Wrold")); + assert!(misspelled.iter().any(|w| w.word == "naeme")); + assert!(misspelled.iter().any(|w| w.word == "Welcom")); +} + +#[test] +fn test_svelte_style() { + utils::init_logging(); + let sample_text = r#" + +"#; + let processor = utils::get_processor(); + let misspelled = processor + .spell_check(sample_text, Some(LanguageType::Svelte), None) + .to_vec(); + println!("Misspelled: {misspelled:#?}"); + + assert_eq!(misspelled.len(), 3); + assert!(misspelled.iter().any(|w| w.word == "backgrond")); + assert!(misspelled.iter().any(|w| w.word == "wieght")); + assert!(misspelled.iter().any(|w| w.word == "bordre")); +} From 2bd03f5fe93f19c2a3b724194f1a368fb5ad88d1 Mon Sep 17 00:00:00 2001 From: niekdomi <152265924+niekdomi@users.noreply.github.com> Date: Sat, 21 Mar 2026 17:02:37 +0100 Subject: [PATCH 2/2] . --- crates/codebook/tests/test_svelte.rs | 36 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/crates/codebook/tests/test_svelte.rs b/crates/codebook/tests/test_svelte.rs index 17a188e..2db03c4 100644 --- a/crates/codebook/tests/test_svelte.rs +++ b/crates/codebook/tests/test_svelte.rs @@ -6,11 +6,11 @@ mod utils; fn test_svelte_html() { utils::init_logging(); let sample_text = r#" -
-

Welcom to my app

-

Enjoye your stay, pleaze report bugs.

-
-"#; +
+

Welcom to my app

+

Enjoye your stay, pleaze report bugs.

+
"#; + let processor = utils::get_processor(); let misspelled = processor .spell_check(sample_text, Some(LanguageType::Svelte), None) @@ -27,11 +27,11 @@ fn test_svelte_html() { fn test_svelte_script() { utils::init_logging(); let sample_text = r#" - -"#; + "#; + let processor = utils::get_processor(); let misspelled = processor .spell_check(sample_text, Some(LanguageType::Svelte), None) @@ -50,14 +50,14 @@ fn test_svelte_script() { fn test_svelte_style() { utils::init_logging(); let sample_text = r#" - -"#; + "#; + let processor = utils::get_processor(); let misspelled = processor .spell_check(sample_text, Some(LanguageType::Svelte), None)