aboutsummaryrefslogtreecommitdiff
path: root/helix-core/src/syntax.rs
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/src/syntax.rs
parentaebdef8257173b31df77ae02bb23ec2abfd07e5c (diff)
Implement Debug for data structure as a feature
Diffstat (limited to 'helix-core/src/syntax.rs')
-rw-r--r--helix-core/src/syntax.rs26
1 files changed, 26 insertions, 0 deletions
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.