|
|
|
@ -1,12 +1,11 @@
|
|
|
|
|
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,
|
|
|
|
|
collections::{HashMap, HashSet},
|
|
|
|
|
fmt,
|
|
|
|
|
path::{Path, PathBuf},
|
|
|
|
|
sync::Arc,
|
|
|
|
|
};
|
|
|
|
@ -14,15 +13,13 @@ use std::{
|
|
|
|
|
use once_cell::sync::{Lazy, OnceCell};
|
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
|
#[derive(Debug, 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)]
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
|
|
|
#[serde(rename_all = "kebab-case")]
|
|
|
|
|
pub struct LanguageConfiguration {
|
|
|
|
|
#[serde(rename = "name")]
|
|
|
|
@ -50,8 +47,7 @@ pub struct LanguageConfiguration {
|
|
|
|
|
pub(crate) indent_query: OnceCell<Option<IndentQuery>>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
|
|
|
#[serde(rename_all = "kebab-case")]
|
|
|
|
|
pub struct LanguageServerConfiguration {
|
|
|
|
|
pub command: String,
|
|
|
|
@ -60,16 +56,14 @@ pub struct LanguageServerConfiguration {
|
|
|
|
|
pub args: Vec<String>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
|
|
|
#[serde(rename_all = "kebab-case")]
|
|
|
|
|
pub struct IndentationConfiguration {
|
|
|
|
|
pub tab_width: usize,
|
|
|
|
|
pub unit: String,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
|
|
|
#[serde(rename_all = "kebab-case")]
|
|
|
|
|
pub struct IndentQuery {
|
|
|
|
|
#[serde(default)]
|
|
|
|
@ -196,7 +190,7 @@ impl LanguageConfiguration {
|
|
|
|
|
|
|
|
|
|
pub static LOADER: OnceCell<Loader> = OnceCell::new();
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
pub struct Loader {
|
|
|
|
|
// highlight_names ?
|
|
|
|
|
language_configs: Vec<Arc<LanguageConfiguration>>,
|
|
|
|
@ -264,10 +258,9 @@ 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()
|
|
|
|
|
f.debug_struct("TsParser").finish()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -279,7 +272,7 @@ thread_local! {
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
pub struct Syntax {
|
|
|
|
|
config: Arc<HighlightConfiguration>,
|
|
|
|
|
|
|
|
|
@ -460,7 +453,7 @@ impl Syntax {
|
|
|
|
|
// buffer_range_for_scope_at_pos
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
pub struct LanguageLayer {
|
|
|
|
|
// mode
|
|
|
|
|
// grammar
|
|
|
|
@ -769,7 +762,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))]
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
pub struct HighlightConfiguration {
|
|
|
|
|
pub language: Grammar,
|
|
|
|
|
pub query: Query,
|
|
|
|
@ -800,7 +793,7 @@ struct LocalScope<'a> {
|
|
|
|
|
local_defs: Vec<LocalDef<'a>>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(feature = "debug", derive(Debug))]
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
struct HighlightIter<'a, 'tree: 'a, F>
|
|
|
|
|
where
|
|
|
|
|
F: FnMut(&str) -> Option<&'a HighlightConfiguration> + 'a,
|
|
|
|
@ -826,10 +819,9 @@ 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()
|
|
|
|
|
f.debug_struct("HighlightIterLayer").finish()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|