aboutsummaryrefslogtreecommitdiff
path: root/helix-core
diff options
context:
space:
mode:
authornotoria2021-06-06 15:55:05 +0000
committerBlaž Hrastnik2021-06-10 13:00:08 +0000
commit1a3a92463405fdd4738fbdbfda212aef58a2919d (patch)
treebc47fdc4957a6890cbad286c52a445ba5d96da9a /helix-core
parentaebdef8257173b31df77ae02bb23ec2abfd07e5c (diff)
Implement Debug for data structure as a feature
Diffstat (limited to 'helix-core')
-rw-r--r--helix-core/Cargo.toml3
-rw-r--r--helix-core/src/diagnostic.rs4
-rw-r--r--helix-core/src/graphemes.rs1
-rw-r--r--helix-core/src/history.rs1
-rw-r--r--helix-core/src/movement.rs1
-rw-r--r--helix-core/src/state.rs1
-rw-r--r--helix-core/src/syntax.rs26
-rw-r--r--helix-core/src/transaction.rs1
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,