mirror of https://github.com/helix-editor/helix
feat: config option for toggling diagnostics
parent
08deeb48b8
commit
8271a35be2
|
@ -1928,24 +1928,6 @@ fn set_option(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn toggle_diagnostics(
|
|
||||||
cx: &mut compositor::Context,
|
|
||||||
args: &[Cow<str>],
|
|
||||||
event: PromptEvent,
|
|
||||||
) -> anyhow::Result<()> {
|
|
||||||
if event != PromptEvent::Validate {
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
|
|
||||||
ensure!(args.is_empty(), ":toggle-diagnostics takes no arguments");
|
|
||||||
|
|
||||||
let (view, _) = current!(cx.editor);
|
|
||||||
view.diagnostics_handler.toggle_active();
|
|
||||||
cx.editor.toggle_diagnostics();
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Toggle boolean config option at runtime. Access nested values by dot
|
/// Toggle boolean config option at runtime. Access nested values by dot
|
||||||
/// syntax, for example to toggle smart case search, use `:toggle search.smart-
|
/// syntax, for example to toggle smart case search, use `:toggle search.smart-
|
||||||
/// case`.
|
/// case`.
|
||||||
|
@ -3167,13 +3149,6 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
fun: read,
|
fun: read,
|
||||||
signature: CommandSignature::positional(&[completers::filename]),
|
signature: CommandSignature::positional(&[completers::filename]),
|
||||||
},
|
},
|
||||||
TypableCommand {
|
|
||||||
name: "toggle-diagnostics",
|
|
||||||
aliases: &["td"],
|
|
||||||
doc: "Toggle Diagnostics",
|
|
||||||
fun: toggle_diagnostics,
|
|
||||||
signature: CommandSignature::all(completers::register)
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
pub static TYPABLE_COMMAND_MAP: Lazy<HashMap<&'static str, &'static TypableCommand>> =
|
pub static TYPABLE_COMMAND_MAP: Lazy<HashMap<&'static str, &'static TypableCommand>> =
|
||||||
|
|
|
@ -191,8 +191,7 @@ impl EditorView {
|
||||||
}
|
}
|
||||||
let config = doc.config.load();
|
let config = doc.config.load();
|
||||||
|
|
||||||
if editor.show_diagnostics {
|
if editor.config().enable_diagnostics {
|
||||||
log::error!("{:#?}", editor.show_diagnostics);
|
|
||||||
let width = view.inner_width(doc);
|
let width = view.inner_width(doc);
|
||||||
let enable_cursor_line = view
|
let enable_cursor_line = view
|
||||||
.diagnostics_handler
|
.diagnostics_handler
|
||||||
|
@ -236,7 +235,7 @@ impl EditorView {
|
||||||
|
|
||||||
if config.inline_diagnostics.disabled()
|
if config.inline_diagnostics.disabled()
|
||||||
&& config.end_of_line_diagnostics == DiagnosticFilter::Disable
|
&& config.end_of_line_diagnostics == DiagnosticFilter::Disable
|
||||||
&& editor.show_diagnostics
|
&& editor.config().enable_diagnostics
|
||||||
{
|
{
|
||||||
Self::render_diagnostics(doc, view, inner, surface, theme);
|
Self::render_diagnostics(doc, view, inner, surface, theme);
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,6 +350,7 @@ pub struct Config {
|
||||||
deserialize_with = "deserialize_alphabet"
|
deserialize_with = "deserialize_alphabet"
|
||||||
)]
|
)]
|
||||||
pub jump_label_alphabet: Vec<char>,
|
pub jump_label_alphabet: Vec<char>,
|
||||||
|
pub enable_diagnostics: bool,
|
||||||
/// Display diagnostic below the line they occur.
|
/// Display diagnostic below the line they occur.
|
||||||
pub inline_diagnostics: InlineDiagnosticsConfig,
|
pub inline_diagnostics: InlineDiagnosticsConfig,
|
||||||
pub end_of_line_diagnostics: DiagnosticFilter,
|
pub end_of_line_diagnostics: DiagnosticFilter,
|
||||||
|
@ -992,6 +993,7 @@ impl Default for Config {
|
||||||
popup_border: PopupBorderConfig::None,
|
popup_border: PopupBorderConfig::None,
|
||||||
indent_heuristic: IndentationHeuristic::default(),
|
indent_heuristic: IndentationHeuristic::default(),
|
||||||
jump_label_alphabet: ('a'..='z').collect(),
|
jump_label_alphabet: ('a'..='z').collect(),
|
||||||
|
enable_diagnostics: true,
|
||||||
inline_diagnostics: InlineDiagnosticsConfig::default(),
|
inline_diagnostics: InlineDiagnosticsConfig::default(),
|
||||||
end_of_line_diagnostics: DiagnosticFilter::Disable,
|
end_of_line_diagnostics: DiagnosticFilter::Disable,
|
||||||
clipboard_provider: ClipboardProvider::default(),
|
clipboard_provider: ClipboardProvider::default(),
|
||||||
|
@ -1049,8 +1051,6 @@ pub struct Editor {
|
||||||
pub debugger_events: SelectAll<UnboundedReceiverStream<dap::Payload>>,
|
pub debugger_events: SelectAll<UnboundedReceiverStream<dap::Payload>>,
|
||||||
pub breakpoints: HashMap<PathBuf, Vec<Breakpoint>>,
|
pub breakpoints: HashMap<PathBuf, Vec<Breakpoint>>,
|
||||||
|
|
||||||
pub show_diagnostics: bool,
|
|
||||||
|
|
||||||
pub syn_loader: Arc<ArcSwap<syntax::Loader>>,
|
pub syn_loader: Arc<ArcSwap<syntax::Loader>>,
|
||||||
pub theme_loader: Arc<theme::Loader>,
|
pub theme_loader: Arc<theme::Loader>,
|
||||||
/// last_theme is used for theme previews. We store the current theme here,
|
/// last_theme is used for theme previews. We store the current theme here,
|
||||||
|
@ -1197,7 +1197,6 @@ impl Editor {
|
||||||
breakpoints: HashMap::new(),
|
breakpoints: HashMap::new(),
|
||||||
syn_loader,
|
syn_loader,
|
||||||
theme_loader,
|
theme_loader,
|
||||||
show_diagnostics: true,
|
|
||||||
last_theme: None,
|
last_theme: None,
|
||||||
last_selection: None,
|
last_selection: None,
|
||||||
registers: Registers::new(Box::new(arc_swap::access::Map::new(
|
registers: Registers::new(Box::new(arc_swap::access::Map::new(
|
||||||
|
@ -1331,10 +1330,6 @@ impl Editor {
|
||||||
self.set_theme_impl(theme, ThemeAction::Set);
|
self.set_theme_impl(theme, ThemeAction::Set);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toggle_diagnostics(&mut self) {
|
|
||||||
self.show_diagnostics = !self.show_diagnostics;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn set_theme_impl(&mut self, theme: Theme, preview: ThemeAction) {
|
fn set_theme_impl(&mut self, theme: Theme, preview: ThemeAction) {
|
||||||
// `ui.selection` is the only scope required to be able to render a theme.
|
// `ui.selection` is the only scope required to be able to render a theme.
|
||||||
if theme.find_scope_index_exact("ui.selection").is_none() {
|
if theme.find_scope_index_exact("ui.selection").is_none() {
|
||||||
|
@ -1659,7 +1654,13 @@ impl Editor {
|
||||||
.try_get(self.tree.focus)
|
.try_get(self.tree.focus)
|
||||||
.filter(|v| id == v.doc) // Different Document
|
.filter(|v| id == v.doc) // Different Document
|
||||||
.cloned()
|
.cloned()
|
||||||
.unwrap_or_else(|| View::new(id, self.config().gutters.clone()));
|
.unwrap_or_else(|| {
|
||||||
|
View::new(
|
||||||
|
id,
|
||||||
|
self.config().gutters.clone(),
|
||||||
|
self.config().enable_diagnostics,
|
||||||
|
)
|
||||||
|
});
|
||||||
let view_id = self.tree.split(
|
let view_id = self.tree.split(
|
||||||
view,
|
view,
|
||||||
match action {
|
match action {
|
||||||
|
@ -1833,7 +1834,11 @@ impl Editor {
|
||||||
.map(|(&doc_id, _)| doc_id)
|
.map(|(&doc_id, _)| doc_id)
|
||||||
.next()
|
.next()
|
||||||
.unwrap_or_else(|| self.new_document(Document::default(self.config.clone())));
|
.unwrap_or_else(|| self.new_document(Document::default(self.config.clone())));
|
||||||
let view = View::new(doc_id, self.config().gutters.clone());
|
let view = View::new(
|
||||||
|
doc_id,
|
||||||
|
self.config().gutters.clone(),
|
||||||
|
self.config().enable_diagnostics,
|
||||||
|
);
|
||||||
let view_id = self.tree.insert(view);
|
let view_id = self.tree.insert(view);
|
||||||
let doc = doc_mut!(self, &doc_id);
|
let doc = doc_mut!(self, &doc_id);
|
||||||
doc.ensure_view_init(view_id);
|
doc.ensure_view_init(view_id);
|
||||||
|
|
|
@ -346,7 +346,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_default_gutter_widths() {
|
fn test_default_gutter_widths() {
|
||||||
let mut view = View::new(DocumentId::default(), GutterConfig::default());
|
let mut view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
|
|
||||||
let rope = Rope::from_str("abc\n\tdef");
|
let rope = Rope::from_str("abc\n\tdef");
|
||||||
|
@ -371,7 +371,7 @@ mod tests {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut view = View::new(DocumentId::default(), gutters);
|
let mut view = View::new(DocumentId::default(), gutters, true);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
|
|
||||||
let rope = Rope::from_str("abc\n\tdef");
|
let rope = Rope::from_str("abc\n\tdef");
|
||||||
|
@ -389,7 +389,7 @@ mod tests {
|
||||||
line_numbers: GutterLineNumbersConfig { min_width: 10 },
|
line_numbers: GutterLineNumbersConfig { min_width: 10 },
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut view = View::new(DocumentId::default(), gutters);
|
let mut view = View::new(DocumentId::default(), gutters, true);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
|
|
||||||
let rope = Rope::from_str("abc\n\tdef");
|
let rope = Rope::from_str("abc\n\tdef");
|
||||||
|
@ -411,7 +411,7 @@ mod tests {
|
||||||
line_numbers: GutterLineNumbersConfig { min_width: 1 },
|
line_numbers: GutterLineNumbersConfig { min_width: 1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut view = View::new(DocumentId::default(), gutters);
|
let mut view = View::new(DocumentId::default(), gutters, true);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
|
|
||||||
let rope = Rope::from_str("a\nb");
|
let rope = Rope::from_str("a\nb");
|
||||||
|
|
|
@ -69,13 +69,13 @@ pub struct DiagnosticsHandler {
|
||||||
// but to fix that larger architecutre changes are needed
|
// but to fix that larger architecutre changes are needed
|
||||||
impl Clone for DiagnosticsHandler {
|
impl Clone for DiagnosticsHandler {
|
||||||
fn clone(&self) -> Self {
|
fn clone(&self) -> Self {
|
||||||
Self::new()
|
Self::new(self.active)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DiagnosticsHandler {
|
impl DiagnosticsHandler {
|
||||||
#[allow(clippy::new_without_default)]
|
#[allow(clippy::new_without_default)]
|
||||||
pub fn new() -> Self {
|
pub fn new(enable_diagnostics: bool) -> Self {
|
||||||
let active_generation = Arc::new(AtomicUsize::new(0));
|
let active_generation = Arc::new(AtomicUsize::new(0));
|
||||||
let events = DiagnosticTimeout {
|
let events = DiagnosticTimeout {
|
||||||
active_generation: active_generation.clone(),
|
active_generation: active_generation.clone(),
|
||||||
|
@ -88,7 +88,7 @@ impl DiagnosticsHandler {
|
||||||
events,
|
events,
|
||||||
last_doc: Cell::new(DocumentId(NonZeroUsize::new(usize::MAX).unwrap())),
|
last_doc: Cell::new(DocumentId(NonZeroUsize::new(usize::MAX).unwrap())),
|
||||||
last_cursor_line: Cell::new(usize::MAX),
|
last_cursor_line: Cell::new(usize::MAX),
|
||||||
active: true,
|
active: enable_diagnostics,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,10 +105,6 @@ impl DiagnosticsHandler {
|
||||||
.store(self.generation.get(), atomic::Ordering::Relaxed);
|
.store(self.generation.get(), atomic::Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toggle_active(&mut self) {
|
|
||||||
self.active = !self.active;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn show_cursorline_diagnostics(&self, doc: &Document, view: ViewId) -> bool {
|
pub fn show_cursorline_diagnostics(&self, doc: &Document, view: ViewId) -> bool {
|
||||||
if !self.active {
|
if !self.active {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -736,22 +736,22 @@ mod test {
|
||||||
width: 180,
|
width: 180,
|
||||||
height: 80,
|
height: 80,
|
||||||
});
|
});
|
||||||
let mut view = View::new(DocumentId::default(), GutterConfig::default());
|
let mut view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
view.area = Rect::new(0, 0, 180, 80);
|
view.area = Rect::new(0, 0, 180, 80);
|
||||||
tree.insert(view);
|
tree.insert(view);
|
||||||
|
|
||||||
let l0 = tree.focus;
|
let l0 = tree.focus;
|
||||||
let view = View::new(DocumentId::default(), GutterConfig::default());
|
let view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Vertical);
|
tree.split(view, Layout::Vertical);
|
||||||
let r0 = tree.focus;
|
let r0 = tree.focus;
|
||||||
|
|
||||||
tree.focus = l0;
|
tree.focus = l0;
|
||||||
let view = View::new(DocumentId::default(), GutterConfig::default());
|
let view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Horizontal);
|
tree.split(view, Layout::Horizontal);
|
||||||
let l1 = tree.focus;
|
let l1 = tree.focus;
|
||||||
|
|
||||||
tree.focus = l0;
|
tree.focus = l0;
|
||||||
let view = View::new(DocumentId::default(), GutterConfig::default());
|
let view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Vertical);
|
tree.split(view, Layout::Vertical);
|
||||||
|
|
||||||
// Tree in test
|
// Tree in test
|
||||||
|
@ -792,28 +792,28 @@ mod test {
|
||||||
});
|
});
|
||||||
|
|
||||||
let doc_l0 = DocumentId::default();
|
let doc_l0 = DocumentId::default();
|
||||||
let mut view = View::new(doc_l0, GutterConfig::default());
|
let mut view = View::new(doc_l0, GutterConfig::default(), true);
|
||||||
view.area = Rect::new(0, 0, 180, 80);
|
view.area = Rect::new(0, 0, 180, 80);
|
||||||
tree.insert(view);
|
tree.insert(view);
|
||||||
|
|
||||||
let l0 = tree.focus;
|
let l0 = tree.focus;
|
||||||
|
|
||||||
let doc_r0 = DocumentId::default();
|
let doc_r0 = DocumentId::default();
|
||||||
let view = View::new(doc_r0, GutterConfig::default());
|
let view = View::new(doc_r0, GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Vertical);
|
tree.split(view, Layout::Vertical);
|
||||||
let r0 = tree.focus;
|
let r0 = tree.focus;
|
||||||
|
|
||||||
tree.focus = l0;
|
tree.focus = l0;
|
||||||
|
|
||||||
let doc_l1 = DocumentId::default();
|
let doc_l1 = DocumentId::default();
|
||||||
let view = View::new(doc_l1, GutterConfig::default());
|
let view = View::new(doc_l1, GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Horizontal);
|
tree.split(view, Layout::Horizontal);
|
||||||
let l1 = tree.focus;
|
let l1 = tree.focus;
|
||||||
|
|
||||||
tree.focus = l0;
|
tree.focus = l0;
|
||||||
|
|
||||||
let doc_l2 = DocumentId::default();
|
let doc_l2 = DocumentId::default();
|
||||||
let view = View::new(doc_l2, GutterConfig::default());
|
let view = View::new(doc_l2, GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Vertical);
|
tree.split(view, Layout::Vertical);
|
||||||
let l2 = tree.focus;
|
let l2 = tree.focus;
|
||||||
|
|
||||||
|
@ -908,19 +908,19 @@ mod test {
|
||||||
width: tree_area_width,
|
width: tree_area_width,
|
||||||
height: 80,
|
height: 80,
|
||||||
});
|
});
|
||||||
let mut view = View::new(DocumentId::default(), GutterConfig::default());
|
let mut view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
view.area = Rect::new(0, 0, 180, 80);
|
view.area = Rect::new(0, 0, 180, 80);
|
||||||
tree.insert(view);
|
tree.insert(view);
|
||||||
|
|
||||||
let view = View::new(DocumentId::default(), GutterConfig::default());
|
let view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Vertical);
|
tree.split(view, Layout::Vertical);
|
||||||
|
|
||||||
let view = View::new(DocumentId::default(), GutterConfig::default());
|
let view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Horizontal);
|
tree.split(view, Layout::Horizontal);
|
||||||
|
|
||||||
tree.remove(tree.focus);
|
tree.remove(tree.focus);
|
||||||
|
|
||||||
let view = View::new(DocumentId::default(), GutterConfig::default());
|
let view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Vertical);
|
tree.split(view, Layout::Vertical);
|
||||||
|
|
||||||
// Make sure that we only have one level in the tree.
|
// Make sure that we only have one level in the tree.
|
||||||
|
@ -946,12 +946,12 @@ mod test {
|
||||||
width: tree_area_width,
|
width: tree_area_width,
|
||||||
height: tree_area_height,
|
height: tree_area_height,
|
||||||
});
|
});
|
||||||
let mut view = View::new(DocumentId::default(), GutterConfig::default());
|
let mut view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
view.area = Rect::new(0, 0, tree_area_width, tree_area_height);
|
view.area = Rect::new(0, 0, tree_area_width, tree_area_height);
|
||||||
tree.insert(view);
|
tree.insert(view);
|
||||||
|
|
||||||
for _ in 0..9 {
|
for _ in 0..9 {
|
||||||
let view = View::new(DocumentId::default(), GutterConfig::default());
|
let view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
tree.split(view, Layout::Vertical);
|
tree.split(view, Layout::Vertical);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ impl fmt::Debug for View {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl View {
|
impl View {
|
||||||
pub fn new(doc: DocumentId, gutters: GutterConfig) -> Self {
|
pub fn new(doc: DocumentId, gutters: GutterConfig, enable_diagnostics: bool) -> Self {
|
||||||
Self {
|
Self {
|
||||||
id: ViewId::default(),
|
id: ViewId::default(),
|
||||||
doc,
|
doc,
|
||||||
|
@ -179,7 +179,7 @@ impl View {
|
||||||
object_selections: Vec::new(),
|
object_selections: Vec::new(),
|
||||||
gutters,
|
gutters,
|
||||||
doc_revisions: HashMap::new(),
|
doc_revisions: HashMap::new(),
|
||||||
diagnostics_handler: DiagnosticsHandler::new(),
|
diagnostics_handler: DiagnosticsHandler::new(enable_diagnostics),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,7 +695,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_text_pos_at_screen_coords() {
|
fn test_text_pos_at_screen_coords() {
|
||||||
let mut view = View::new(DocumentId::default(), GutterConfig::default());
|
let mut view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
let rope = Rope::from_str("abc\n\tdef");
|
let rope = Rope::from_str("abc\n\tdef");
|
||||||
let mut doc = Document::from(
|
let mut doc = Document::from(
|
||||||
|
@ -870,6 +870,7 @@ mod tests {
|
||||||
layout: vec![GutterType::Diagnostics],
|
layout: vec![GutterType::Diagnostics],
|
||||||
line_numbers: GutterLineNumbersConfig::default(),
|
line_numbers: GutterLineNumbersConfig::default(),
|
||||||
},
|
},
|
||||||
|
true,
|
||||||
);
|
);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
let rope = Rope::from_str("abc\n\tdef");
|
let rope = Rope::from_str("abc\n\tdef");
|
||||||
|
@ -900,6 +901,7 @@ mod tests {
|
||||||
layout: vec![],
|
layout: vec![],
|
||||||
line_numbers: GutterLineNumbersConfig::default(),
|
line_numbers: GutterLineNumbersConfig::default(),
|
||||||
},
|
},
|
||||||
|
true,
|
||||||
);
|
);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
let rope = Rope::from_str("abc\n\tdef");
|
let rope = Rope::from_str("abc\n\tdef");
|
||||||
|
@ -924,7 +926,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_text_pos_at_screen_coords_cjk() {
|
fn test_text_pos_at_screen_coords_cjk() {
|
||||||
let mut view = View::new(DocumentId::default(), GutterConfig::default());
|
let mut view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
let rope = Rope::from_str("Hi! こんにちは皆さん");
|
let rope = Rope::from_str("Hi! こんにちは皆さん");
|
||||||
let mut doc = Document::from(
|
let mut doc = Document::from(
|
||||||
|
@ -1008,7 +1010,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_text_pos_at_screen_coords_graphemes() {
|
fn test_text_pos_at_screen_coords_graphemes() {
|
||||||
let mut view = View::new(DocumentId::default(), GutterConfig::default());
|
let mut view = View::new(DocumentId::default(), GutterConfig::default(), true);
|
||||||
view.area = Rect::new(40, 40, 40, 40);
|
view.area = Rect::new(40, 40, 40, 40);
|
||||||
let rope = Rope::from_str("Hèl̀l̀ò world!");
|
let rope = Rope::from_str("Hèl̀l̀ò world!");
|
||||||
let mut doc = Document::from(
|
let mut doc = Document::from(
|
||||||
|
|
Loading…
Reference in New Issue