diff --git a/Cargo.lock b/Cargo.lock index 75df9d64c..c86a4f9f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,9 +52,9 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.0.67" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" +checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787" dependencies = [ "jobserver", ] @@ -244,9 +244,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if", "libc", @@ -477,9 +477,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.94" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e" +checksum = "789da6d93f1b866ffe175afc5322a4d76c038605a1c3319bb57b06967ca98a36" [[package]] name = "lock_api" @@ -501,9 +501,9 @@ dependencies = [ [[package]] name = "lsp-types" -version = "0.89.0" +version = "0.89.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07731ecd4ee0654728359a5b95e2a254c857876c04b85225496a35d60345daa7" +checksum = "48b8a871b0a450bcec0e26d74a59583c8173cb9fb7d7f98889e18abb84838e0f" dependencies = [ "bitflags", "serde", @@ -659,9 +659,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "proc-macro2" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" +checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" dependencies = [ "unicode-xid", ] @@ -868,18 +868,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" +checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" +checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d" dependencies = [ "proc-macro2", "quote", @@ -972,9 +972,9 @@ dependencies = [ [[package]] name = "tree-sitter" -version = "0.19.3" +version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f41201fed3db3b520405a9c01c61773a250d4c3f43e9861c14b2bb232c981ab" +checksum = "ad726ec26496bf4c083fff0f43d4eb3a2ad1bba305323af5ff91383c0b6ecac0" dependencies = [ "cc", "regex", diff --git a/TODO.md b/TODO.md index 6bc74844b..d1b49b9b7 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,8 @@ ------ +as you type completion! + - tree sitter: - lua - markdown @@ -18,6 +20,9 @@ - [ ] document.on_type provider triggers - [ ] completion isIncomplete support +- [ ] scroll wheel support +- [ ] matching bracket highlight + 1 - [ ] respect view fullscreen flag - [ ] Implement marks (superset of Selection/Range) diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index 1b8e832bf..febbf8219 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -745,7 +745,7 @@ struct LocalScope<'a> { local_defs: Vec>, } -struct HighlightIter<'a, F> +struct HighlightIter<'a, 'tree: 'a, F> where F: FnMut(&str) -> Option<&'a HighlightConfiguration> + 'a, { @@ -753,16 +753,16 @@ where byte_offset: usize, injection_callback: F, cancellation_flag: Option<&'a AtomicUsize>, - layers: Vec>, + layers: Vec>, iter_count: usize, next_event: Option, last_highlight_range: Option<(usize, usize, usize)>, } -struct HighlightIterLayer<'a> { +struct HighlightIterLayer<'a, 'tree: 'a> { _tree: Option, cursor: QueryCursor, - captures: iter::Peekable>>, + captures: iter::Peekable>>, config: &'a HighlightConfiguration, highlight_end_stack: Vec, scope_stack: Vec>, @@ -929,7 +929,7 @@ impl HighlightConfiguration { } } -impl<'a> HighlightIterLayer<'a> { +impl<'a, 'tree: 'a> HighlightIterLayer<'a, 'tree> { /// Create a new 'layer' of highlighting for this document. /// /// In the even that the new layer contains "combined injections" (injections where multiple @@ -1193,7 +1193,7 @@ impl<'a> HighlightIterLayer<'a> { } } -impl<'a, F> HighlightIter<'a, F> +impl<'a, 'tree: 'a, F> HighlightIter<'a, 'tree, F> where F: FnMut(&str) -> Option<&'a HighlightConfiguration> + 'a, { @@ -1244,7 +1244,7 @@ where } } - fn insert_layer(&mut self, mut layer: HighlightIterLayer<'a>) { + fn insert_layer(&mut self, mut layer: HighlightIterLayer<'a, 'tree>) { if let Some(sort_key) = layer.sort_key() { let mut i = 1; while i < self.layers.len() { @@ -1263,7 +1263,7 @@ where } } -impl<'a, F> Iterator for HighlightIter<'a, F> +impl<'a, 'tree: 'a, F> Iterator for HighlightIter<'a, 'tree, F> where F: FnMut(&str) -> Option<&'a HighlightConfiguration> + 'a, { diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index e5b572634..674f6d23d 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -674,6 +674,7 @@ pub fn search(cx: &mut Context) { cx.push_layer(Box::new(prompt)); } +// can't search next for ""compose"" for some reason pub fn _search_next(cx: &mut Context, extend: bool) { if let Some(query) = register::get('\\') { @@ -1670,6 +1671,9 @@ pub mod insert { let head = pos + offs + text.len(); + // TODO: range replace or extend + // range.replace(|range| range.is_empty(), head); -> fn extend if cond true, new head pos + // can be used with cx.mode to do replace or extend on most changes ranges.push(Range::new( if range.is_empty() { head diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs index f79c22352..0af03d14a 100644 --- a/helix-term/src/ui/completion.rs +++ b/helix-term/src/ui/completion.rs @@ -19,10 +19,7 @@ use lsp::CompletionItem; impl menu::Item for CompletionItem { fn filter_text(&self) -> &str { - self.filter_text - .as_ref() - .unwrap_or_else(|| &self.label) - .as_str() + self.filter_text.as_ref().unwrap_or(&self.label).as_str() } fn label(&self) -> &str { diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 6d7928382..c597f8409 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -148,6 +148,13 @@ impl EditorView { // TODO: scope matching: biggest union match? [string] & [html, string], [string, html] & [ string, html] // can do this by sorting our theme matches based on array len (longest first) then stopping at the // first rule that matches (rule.all(|scope| scopes.contains(scope))) + // log::info!( + // "scopes: {:?}", + // spans + // .iter() + // .map(|span| theme.scopes()[span.0].as_str()) + // .collect::>() + // ); let style = match spans.first() { Some(span) => theme.get(theme.scopes()[span.0].as_str()), None => theme.get("ui.text"), diff --git a/helix-term/src/ui/markdown.rs b/helix-term/src/ui/markdown.rs index 8d14841e1..daac173da 100644 --- a/helix-term/src/ui/markdown.rs +++ b/helix-term/src/ui/markdown.rs @@ -107,6 +107,8 @@ fn parse<'a>(contents: &'a str, theme: Option<&Theme>) -> tui::text::Text<'a> { None => text_style, }; + // TODO: replace tabs with indentation + let mut slice = &text[start..end]; while let Some(end) = slice.find('\n') { // emit span up to newline @@ -153,6 +155,7 @@ fn parse<'a>(contents: &'a str, theme: Option<&Theme>) -> tui::text::Text<'a> { } } Event::Code(text) | Event::Html(text) => { + log::warn!("code {:?}", text); let mut span = to_span(text); span.style = code_style; spans.push(span); @@ -167,7 +170,9 @@ fn parse<'a>(contents: &'a str, theme: Option<&Theme>) -> tui::text::Text<'a> { lines.push(Spans::default()); } // TaskListMarker(bool) true if checked - _ => (), + _ => { + log::warn!("unhandled markdown event {:?}", event); + } } // build up a vec of Paragraph tui widgets } diff --git a/helix-term/src/ui/prompt.rs b/helix-term/src/ui/prompt.rs index 9bde1f574..dbbef72c7 100644 --- a/helix-term/src/ui/prompt.rs +++ b/helix-term/src/ui/prompt.rs @@ -272,7 +272,7 @@ impl Component for Prompt { fn cursor_position(&self, area: Rect, editor: &Editor) -> Option { Some(Position::new( - area.height as usize, + area.y as usize, area.x as usize + self.prompt.len() + self.cursor, )) } diff --git a/runtime/queries/go/indents.toml b/runtime/queries/go/indents.toml index 112aa3d69..9fa65bf99 100644 --- a/runtime/queries/go/indents.toml +++ b/runtime/queries/go/indents.toml @@ -3,6 +3,7 @@ indent = [ "const_declaration", "var_declaration", "type_declaration", + "type_spec", "function_declaration", "method_declaration", "composite_literal", diff --git a/shell.nix b/shell.nix index 0a26b6ad6..b62745815 100644 --- a/shell.nix +++ b/shell.nix @@ -12,6 +12,7 @@ pkgs.mkShell { # https://github.com/rust-lang/rust/issues/55979 LD_LIBRARY_PATH="${stdenv.cc.cc.lib}/lib64:$LD_LIBRARY_PATH"; - HELIX_RUNTIME=./runtime; + # HELIX_RUNTIME=./runtime; + HELIX_RUNTIME="/home/speed/src/helix/runtime"; } diff --git a/theme.toml b/theme.toml index 18a94deb7..4e82aeb7d 100644 --- a/theme.toml +++ b/theme.toml @@ -47,6 +47,8 @@ "ui.text" = { fg = "#a4a0e8"} # lavender "ui.text.focus" = { fg = "#dbbfef"} # lilac +"ui.menu.selected" = { fg = "#281733", bg = "#ffffff" } # revolver + "warning" = "#ffcd1c" "error" = "#f47868" "info" = "#6F44F0"