diff options
author | Gabriel Dinner-David | 2024-02-27 13:36:25 +0000 |
---|---|---|
committer | GitHub | 2024-02-27 13:36:25 +0000 |
commit | 26b3dc29be886c5a2ed1a5caaaf09eb730829c3e (patch) | |
tree | 7235f7dc402daaa9b3f5260d9a3f8aa166592ec6 /helix-core/src/syntax.rs | |
parent | f46a09ab4f945273c7baf32e58438b501914fabb (diff) |
toggling of block comments (#4718)
Diffstat (limited to 'helix-core/src/syntax.rs')
-rw-r--r-- | helix-core/src/syntax.rs | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index 0d8559ca..3b224e1b 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -99,7 +99,19 @@ pub struct LanguageConfiguration { pub shebangs: Vec<String>, // interpreter(s) associated with language #[serde(default)] pub roots: Vec<String>, // these indicate project roots <.git, Cargo.toml> - pub comment_token: Option<String>, + #[serde( + default, + skip_serializing, + deserialize_with = "from_comment_tokens", + alias = "comment-token" + )] + pub comment_tokens: Option<Vec<String>>, + #[serde( + default, + skip_serializing, + deserialize_with = "from_block_comment_tokens" + )] + pub block_comment_tokens: Option<Vec<BlockCommentToken>>, pub text_width: Option<usize>, pub soft_wrap: Option<SoftWrap>, @@ -240,6 +252,59 @@ impl<'de> Deserialize<'de> for FileType { } } +fn from_comment_tokens<'de, D>(deserializer: D) -> Result<Option<Vec<String>>, D::Error> +where + D: serde::Deserializer<'de>, +{ + #[derive(Deserialize)] + #[serde(untagged)] + enum CommentTokens { + Multiple(Vec<String>), + Single(String), + } + Ok( + Option::<CommentTokens>::deserialize(deserializer)?.map(|tokens| match tokens { + CommentTokens::Single(val) => vec![val], + CommentTokens::Multiple(vals) => vals, + }), + ) +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct BlockCommentToken { + pub start: String, + pub end: String, +} + +impl Default for BlockCommentToken { + fn default() -> Self { + BlockCommentToken { + start: "/*".to_string(), + end: "*/".to_string(), + } + } +} + +fn from_block_comment_tokens<'de, D>( + deserializer: D, +) -> Result<Option<Vec<BlockCommentToken>>, D::Error> +where + D: serde::Deserializer<'de>, +{ + #[derive(Deserialize)] + #[serde(untagged)] + enum BlockCommentTokens { + Multiple(Vec<BlockCommentToken>), + Single(BlockCommentToken), + } + Ok( + Option::<BlockCommentTokens>::deserialize(deserializer)?.map(|tokens| match tokens { + BlockCommentTokens::Single(val) => vec![val], + BlockCommentTokens::Multiple(vals) => vals, + }), + ) +} + #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)] #[serde(rename_all = "kebab-case")] pub enum LanguageServerFeature { |