diff options
author | notoria | 2021-06-06 15:55:05 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-06-10 13:00:08 +0000 |
commit | 1a3a92463405fdd4738fbdbfda212aef58a2919d (patch) | |
tree | bc47fdc4957a6890cbad286c52a445ba5d96da9a /helix-core | |
parent | aebdef8257173b31df77ae02bb23ec2abfd07e5c (diff) |
Implement Debug for data structure as a feature
Diffstat (limited to 'helix-core')
-rw-r--r-- | helix-core/Cargo.toml | 3 | ||||
-rw-r--r-- | helix-core/src/diagnostic.rs | 4 | ||||
-rw-r--r-- | helix-core/src/graphemes.rs | 1 | ||||
-rw-r--r-- | helix-core/src/history.rs | 1 | ||||
-rw-r--r-- | helix-core/src/movement.rs | 1 | ||||
-rw-r--r-- | helix-core/src/state.rs | 1 | ||||
-rw-r--r-- | helix-core/src/syntax.rs | 26 | ||||
-rw-r--r-- | helix-core/src/transaction.rs | 1 |
8 files changed, 37 insertions, 1 deletions
diff --git a/helix-core/Cargo.toml b/helix-core/Cargo.toml index 2d7a6ae8..08d10726 100644 --- a/helix-core/Cargo.toml +++ b/helix-core/Cargo.toml @@ -10,6 +10,7 @@ license = "MPL-2.0" [features] embed_runtime = ["rust-embed"] +debug = [] [dependencies] helix-syntax = { path = "../helix-syntax" } @@ -17,7 +18,7 @@ helix-syntax = { path = "../helix-syntax" } ropey = "1.2" smallvec = "1.4" tendril = "0.4.2" -unicode-segmentation = "1.6" +unicode-segmentation = { git = "https://github.com/unicode-rs/unicode-segmentation.git" } unicode-width = "0.1" unicode-general-category = "0.4.0" # slab = "0.4.2" diff --git a/helix-core/src/diagnostic.rs b/helix-core/src/diagnostic.rs index cf58b9af..0ab7b645 100644 --- a/helix-core/src/diagnostic.rs +++ b/helix-core/src/diagnostic.rs @@ -1,3 +1,4 @@ +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Eq, PartialEq)] pub enum Severity { Error, @@ -6,10 +7,13 @@ pub enum Severity { Hint, } +#[cfg_attr(feature = "debug", derive(Debug))] pub struct Range { pub start: usize, pub end: usize, } + +#[cfg_attr(feature = "debug", derive(Debug))] pub struct Diagnostic { pub range: Range, pub line: usize, diff --git a/helix-core/src/graphemes.rs b/helix-core/src/graphemes.rs index 5ec95615..c68b0ee5 100644 --- a/helix-core/src/graphemes.rs +++ b/helix-core/src/graphemes.rs @@ -147,6 +147,7 @@ pub fn is_grapheme_boundary(slice: RopeSlice, char_idx: usize) -> bool { } /// An iterator over the graphemes of a `RopeSlice`. +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Clone)] pub struct RopeGraphemes<'a> { text: RopeSlice<'a>, diff --git a/helix-core/src/history.rs b/helix-core/src/history.rs index 4348ee32..6eb72cea 100644 --- a/helix-core/src/history.rs +++ b/helix-core/src/history.rs @@ -2,6 +2,7 @@ use crate::{ChangeSet, Rope, State, Transaction}; use smallvec::{smallvec, SmallVec}; /// Undo-tree style history store. +#[cfg_attr(feature = "debug", derive(Debug))] pub struct History { revisions: Vec<Revision>, cursor: usize, diff --git a/helix-core/src/movement.rs b/helix-core/src/movement.rs index 9d62b16c..8a30e4c6 100644 --- a/helix-core/src/movement.rs +++ b/helix-core/src/movement.rs @@ -1,6 +1,7 @@ use crate::graphemes::{nth_next_grapheme_boundary, nth_prev_grapheme_boundary, RopeGraphemes}; use crate::{coords_at_pos, pos_at_coords, ChangeSet, Position, Range, Rope, RopeSlice, Selection}; +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Copy, Clone, PartialEq, Eq)] pub enum Direction { Forward, diff --git a/helix-core/src/state.rs b/helix-core/src/state.rs index ab475cab..c8a0cf8b 100644 --- a/helix-core/src/state.rs +++ b/helix-core/src/state.rs @@ -1,6 +1,7 @@ use crate::{Rope, Selection}; /// A state represents the current editor state of a single buffer. +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Clone)] pub struct State { pub doc: Rope, diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index b0f82ca1..ca20ff1a 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -1,6 +1,8 @@ use crate::{regex::Regex, Change, Rope, RopeSlice, Transaction}; pub use helix_syntax::{get_language, get_language_name, Lang}; +#[cfg(feature = "debug")] +use std::fmt; use std::{ borrow::Cow, cell::RefCell, @@ -12,12 +14,14 @@ use std::{ use once_cell::sync::{Lazy, OnceCell}; use serde::{Deserialize, Serialize}; +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Serialize, Deserialize)] pub struct Configuration { pub language: Vec<LanguageConfiguration>, } // largely based on tree-sitter/cli/src/loader.rs +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] pub struct LanguageConfiguration { @@ -46,6 +50,7 @@ pub struct LanguageConfiguration { pub(crate) indent_query: OnceCell<Option<IndentQuery>>, } +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] pub struct LanguageServerConfiguration { @@ -55,6 +60,7 @@ pub struct LanguageServerConfiguration { pub args: Vec<String>, } +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] pub struct IndentationConfiguration { @@ -62,6 +68,7 @@ pub struct IndentationConfiguration { pub unit: String, } +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] pub struct IndentQuery { @@ -189,6 +196,7 @@ impl LanguageConfiguration { pub static LOADER: OnceCell<Loader> = OnceCell::new(); +#[cfg_attr(feature = "debug", derive(Debug))] pub struct Loader { // highlight_names ? language_configs: Vec<Arc<LanguageConfiguration>>, @@ -256,6 +264,13 @@ pub struct TsParser { cursors: Vec<QueryCursor>, } +#[cfg(feature = "debug")] +impl fmt::Debug for TsParser { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("TsParser").finish_non_exhaustive() + } +} + // could also just use a pool, or a single instance? thread_local! { pub static PARSER: RefCell<TsParser> = RefCell::new(TsParser { @@ -264,6 +279,7 @@ thread_local! { }) } +#[cfg_attr(feature = "debug", derive(Debug))] pub struct Syntax { config: Arc<HighlightConfiguration>, @@ -444,6 +460,7 @@ impl Syntax { // buffer_range_for_scope_at_pos } +#[cfg_attr(feature = "debug", derive(Debug))] pub struct LanguageLayer { // mode // grammar @@ -752,6 +769,7 @@ pub enum HighlightEvent { /// Contains the data neeeded to higlight code written in a particular language. /// /// This struct is immutable and can be shared between threads. +#[cfg_attr(feature = "debug", derive(Debug))] pub struct HighlightConfiguration { pub language: Grammar, pub query: Query, @@ -782,6 +800,7 @@ struct LocalScope<'a> { local_defs: Vec<LocalDef<'a>>, } +#[cfg_attr(feature = "debug", derive(Debug))] struct HighlightIter<'a, 'tree: 'a, F> where F: FnMut(&str) -> Option<&'a HighlightConfiguration> + 'a, @@ -807,6 +826,13 @@ struct HighlightIterLayer<'a, 'tree: 'a> { depth: usize, } +#[cfg(feature = "debug")] +impl<'a, 'tree: 'a> fmt::Debug for HighlightIterLayer<'a, 'tree> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("HighlightIterLayer").finish_non_exhaustive() + } +} + impl HighlightConfiguration { /// Creates a `HighlightConfiguration` for a given `Grammar` and set of highlighting /// queries. diff --git a/helix-core/src/transaction.rs b/helix-core/src/transaction.rs index 3a719628..24abe0ab 100644 --- a/helix-core/src/transaction.rs +++ b/helix-core/src/transaction.rs @@ -15,6 +15,7 @@ pub enum Operation { Insert(Tendril), } +#[cfg_attr(feature = "debug", derive(Debug))] #[derive(Copy, Clone, PartialEq, Eq)] pub enum Assoc { Before, |