diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 08843aacfe2e0a5babf44706c980692c3ae9b198..c8730be45223383faad3079c9eeee7acfedd09da 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -1631,6 +1631,8 @@ impl BufferSnapshot { if capture.index == config.indent_capture_ix { start.get_or_insert(Point::from_ts_point(capture.node.start_position())); end.get_or_insert(Point::from_ts_point(capture.node.end_position())); + } else if Some(capture.index) == config.start_capture_ix { + start = Some(Point::from_ts_point(capture.node.end_position())); } else if Some(capture.index) == config.end_capture_ix { end = Some(Point::from_ts_point(capture.node.start_position())); } diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 780f6e75b52521bf751f7de1a748b91954001ac3..0366bdf669e217b323a70f3aaf1e5fc3651ede63 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -304,6 +304,7 @@ pub struct Grammar { struct IndentConfig { query: Query, indent_capture_ix: u32, + start_capture_ix: Option, end_capture_ix: Option, } @@ -661,11 +662,13 @@ impl Language { let grammar = self.grammar_mut(); let query = Query::new(grammar.ts_language, source)?; let mut indent_capture_ix = None; + let mut start_capture_ix = None; let mut end_capture_ix = None; get_capture_indices( &query, &mut [ ("indent", &mut indent_capture_ix), + ("start", &mut start_capture_ix), ("end", &mut end_capture_ix), ], ); @@ -673,6 +676,7 @@ impl Language { grammar.indents_config = Some(IndentConfig { query, indent_capture_ix, + start_capture_ix, end_capture_ix, }); } diff --git a/crates/zed/src/languages/html/highlights.scm b/crates/zed/src/languages/html/highlights.scm index d6d361ca49d8b00b2024ed58512925f9a54dedbd..0ce535fad4a5594cd2cc3afeed168c2a5429cd8a 100644 --- a/crates/zed/src/languages/html/highlights.scm +++ b/crates/zed/src/languages/html/highlights.scm @@ -1,11 +1,15 @@ (tag_name) @keyword +(erroneous_end_tag_name) @keyword (doctype) @constant (attribute_name) @property (attribute_value) @string (comment) @comment +"=" @operator + [ "<" ">" "" ] @punctuation.bracket \ No newline at end of file diff --git a/crates/zed/src/languages/html/indents.scm b/crates/zed/src/languages/html/indents.scm index a1560bfea74a7a44db92a667ed2aa1acf788c7d1..436663dba3e1993c84e151f09c581844fdcb977a 100644 --- a/crates/zed/src/languages/html/indents.scm +++ b/crates/zed/src/languages/html/indents.scm @@ -1 +1,6 @@ -(tag_name) @indent +(start_tag ">" @end) @indent +(self_closing_tag "/>" @end) @indent + +(element + (start_tag) @start + (end_tag)? @end) @indent diff --git a/crates/zed/src/languages/html/injections.scm b/crates/zed/src/languages/html/injections.scm index 6d2b8e93774bc7b2aeb5db348393679fc8636a83..60688f599ff478265f0a5234082595f7d08c13c5 100644 --- a/crates/zed/src/languages/html/injections.scm +++ b/crates/zed/src/languages/html/injections.scm @@ -1,4 +1,3 @@ (script_element (raw_text) @content (#set! "language" "javascript")) -