mirror of https://github.com/helix-editor/helix
Expose doc.syntax() via accessor.
parent
2b64f49f2c
commit
8ba1e15d29
|
@ -770,12 +770,8 @@ pub fn open_below(cx: &mut Context) {
|
||||||
let changes: Vec<Change> = positions
|
let changes: Vec<Change> = positions
|
||||||
.map(|index| {
|
.map(|index| {
|
||||||
// TODO: share logic with insert_newline for indentation
|
// TODO: share logic with insert_newline for indentation
|
||||||
let indent_level = helix_core::indent::suggested_indent_for_pos(
|
let indent_level =
|
||||||
doc.syntax.as_ref(),
|
helix_core::indent::suggested_indent_for_pos(doc.syntax(), text, index, true);
|
||||||
text,
|
|
||||||
index,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
let indent = " ".repeat(TAB_WIDTH).repeat(indent_level);
|
let indent = " ".repeat(TAB_WIDTH).repeat(indent_level);
|
||||||
let mut text = String::with_capacity(1 + indent.len());
|
let mut text = String::with_capacity(1 + indent.len());
|
||||||
text.push('\n');
|
text.push('\n');
|
||||||
|
@ -970,12 +966,8 @@ pub mod insert {
|
||||||
let doc = cx.doc();
|
let doc = cx.doc();
|
||||||
let text = doc.text().slice(..);
|
let text = doc.text().slice(..);
|
||||||
let transaction = Transaction::change_by_selection(doc.text(), doc.selection(), |range| {
|
let transaction = Transaction::change_by_selection(doc.text(), doc.selection(), |range| {
|
||||||
let indent_level = helix_core::indent::suggested_indent_for_pos(
|
let indent_level =
|
||||||
doc.syntax.as_ref(),
|
helix_core::indent::suggested_indent_for_pos(doc.syntax(), text, range.head, true);
|
||||||
text,
|
|
||||||
range.head,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
let indent = " ".repeat(TAB_WIDTH).repeat(indent_level);
|
let indent = " ".repeat(TAB_WIDTH).repeat(indent_level);
|
||||||
let mut text = String::with_capacity(1 + indent.len());
|
let mut text = String::with_capacity(1 + indent.len());
|
||||||
text.push('\n');
|
text.push('\n');
|
||||||
|
@ -1434,7 +1426,7 @@ pub fn toggle_comments(cx: &mut Context) {
|
||||||
pub fn expand_selection(cx: &mut Context) {
|
pub fn expand_selection(cx: &mut Context) {
|
||||||
let doc = cx.doc();
|
let doc = cx.doc();
|
||||||
|
|
||||||
if let Some(syntax) = &doc.syntax {
|
if let Some(syntax) = doc.syntax() {
|
||||||
let text = doc.text().slice(..);
|
let text = doc.text().slice(..);
|
||||||
let selection = object::expand_selection(syntax, text, doc.selection());
|
let selection = object::expand_selection(syntax, text, doc.selection());
|
||||||
doc.set_selection(selection);
|
doc.set_selection(selection);
|
||||||
|
|
|
@ -90,7 +90,7 @@ impl EditorView {
|
||||||
// TODO: range doesn't actually restrict source, just highlight range
|
// TODO: range doesn't actually restrict source, just highlight range
|
||||||
// TODO: cache highlight results
|
// TODO: cache highlight results
|
||||||
// TODO: only recalculate when state.doc is actually modified
|
// TODO: only recalculate when state.doc is actually modified
|
||||||
let highlights: Vec<_> = match &view.doc.syntax {
|
let highlights: Vec<_> = match view.doc.syntax() {
|
||||||
Some(syntax) => {
|
Some(syntax) => {
|
||||||
syntax
|
syntax
|
||||||
.highlight_iter(text.slice(..), Some(range), None, |_| None)
|
.highlight_iter(text.slice(..), Some(range), None, |_| None)
|
||||||
|
|
|
@ -7,11 +7,11 @@ use std::borrow::Cow;
|
||||||
use std::string::String;
|
use std::string::String;
|
||||||
|
|
||||||
pub struct Prompt {
|
pub struct Prompt {
|
||||||
pub prompt: String,
|
prompt: String,
|
||||||
pub line: String,
|
pub line: String,
|
||||||
pub cursor: usize,
|
cursor: usize,
|
||||||
pub completion: Vec<Cow<'static, str>>,
|
completion: Vec<Cow<'static, str>>,
|
||||||
pub completion_selection_index: Option<usize>,
|
completion_selection_index: Option<usize>,
|
||||||
completion_fn: Box<dyn FnMut(&str) -> Vec<Cow<'static, str>>>,
|
completion_fn: Box<dyn FnMut(&str) -> Vec<Cow<'static, str>>>,
|
||||||
callback_fn: Box<dyn FnMut(&mut Editor, &str, PromptEvent)>,
|
callback_fn: Box<dyn FnMut(&mut Editor, &str, PromptEvent)>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,15 +18,13 @@ pub enum Mode {
|
||||||
|
|
||||||
pub struct Document {
|
pub struct Document {
|
||||||
pub state: State, // rope + selection
|
pub state: State, // rope + selection
|
||||||
/// File path on disk.
|
|
||||||
path: Option<PathBuf>,
|
path: Option<PathBuf>,
|
||||||
|
|
||||||
/// Current editing mode.
|
/// Current editing mode.
|
||||||
pub mode: Mode,
|
pub mode: Mode,
|
||||||
pub restore_cursor: bool,
|
pub restore_cursor: bool,
|
||||||
|
|
||||||
/// Tree-sitter AST tree
|
syntax: Option<Syntax>,
|
||||||
pub syntax: Option<Syntax>,
|
|
||||||
// /// Corresponding language scope name. Usually `source.<lang>`.
|
// /// Corresponding language scope name. Usually `source.<lang>`.
|
||||||
pub(crate) language: Option<Arc<LanguageConfiguration>>,
|
pub(crate) language: Option<Arc<LanguageConfiguration>>,
|
||||||
|
|
||||||
|
@ -36,7 +34,6 @@ pub struct Document {
|
||||||
old_state: Option<State>,
|
old_state: Option<State>,
|
||||||
/// Undo tree.
|
/// Undo tree.
|
||||||
history: History,
|
history: History,
|
||||||
/// Current document version, incremented at each change.
|
|
||||||
version: i32, // should be usize?
|
version: i32, // should be usize?
|
||||||
|
|
||||||
pub diagnostics: Vec<Diagnostic>,
|
pub diagnostics: Vec<Diagnostic>,
|
||||||
|
@ -284,6 +281,7 @@ impl Document {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
/// Current document version, incremented at each change.
|
||||||
pub fn version(&self) -> i32 {
|
pub fn version(&self) -> i32 {
|
||||||
self.version
|
self.version
|
||||||
}
|
}
|
||||||
|
@ -292,7 +290,13 @@ impl Document {
|
||||||
self.language_server.as_deref()
|
self.language_server.as_deref()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tree-sitter AST tree
|
||||||
|
pub fn syntax(&self) -> Option<&Syntax> {
|
||||||
|
self.syntax.as_ref()
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
/// File path on disk.
|
||||||
pub fn path(&self) -> Option<&PathBuf> {
|
pub fn path(&self) -> Option<&PathBuf> {
|
||||||
self.path.as_ref()
|
self.path.as_ref()
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ impl Editor {
|
||||||
self.tree.remove(id)
|
self.tree.remove(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn should_close(&mut self) -> bool {
|
pub fn should_close(&self) -> bool {
|
||||||
self.tree.is_empty()
|
self.tree.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue