From b44a6428df1f8f08471c1436493cbe133d728f7f Mon Sep 17 00:00:00 2001 From: 0xaaaa Date: Wed, 24 Dec 2025 02:18:11 +0000 Subject: [PATCH 1/2] Python: Add Tree-sitter queries to match alias names in import statements --- crates/codebook/src/queries/python.scm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/codebook/src/queries/python.scm b/crates/codebook/src/queries/python.scm index 5269665..fa58e6c 100644 --- a/crates/codebook/src/queries/python.scm +++ b/crates/codebook/src/queries/python.scm @@ -8,3 +8,9 @@ name: (identifier) @identifier) (assignment left: (identifier) @identifier) +(import_statement + name: (aliased_import + alias: (identifier) @identifier)) +(import_from_statement + name: (aliased_import + alias: (identifier) @identifier)) From a7a6a4bb155f2c58659bd5082a6ed764aed18efb Mon Sep 17 00:00:00 2001 From: 0xaaaa Date: Thu, 1 Jan 2026 07:11:14 +0000 Subject: [PATCH 2/2] Added tests for Python import statements --- crates/codebook/tests/test_python.rs | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/crates/codebook/tests/test_python.rs b/crates/codebook/tests/test_python.rs index a0e18d0..c6220d3 100644 --- a/crates/codebook/tests/test_python.rs +++ b/crates/codebook/tests/test_python.rs @@ -267,3 +267,34 @@ simple = f'check these wordz {but} {not} {the} {variables}' assert!(!misspelled.iter().any(|r| r.word == word)); } } + +#[test] +fn test_python_import_statements() { + utils::init_logging(); + let processor = utils::get_processor(); + let sample_text = r#" + import no_typpoa + import no_typpob.no_typpoc + + import no_typpod as yes_typpoe + import no_typpof.no_typpog as yes_typpoh + + from no_typpoi import no_typpoj + from no_typpok.no_typpol import no_typpom + + from no_typpoo import no_typpop as yes_typpoq + from no_typpor.no_typpos import no_typpot as yes_typpou + from .. import no_typpov as yes_typpow + "#; + let expected = vec!["typpoe", "typpoh", "typpoq", "typpou", "typpow"]; + let binding = processor + .spell_check(sample_text, Some(LanguageType::Python), None) + .to_vec(); + let mut misspelled = binding + .iter() + .map(|r| r.word.as_str()) + .collect::>(); + misspelled.sort(); + println!("Misspelled words: {misspelled:?}"); + assert_eq!(misspelled, expected); +}