syntax.rs

  1use serde::Deserialize;
  2use strum::EnumIter;
  3
  4#[derive(Debug, Deserialize)]
  5#[serde(untagged)]
  6pub enum VsCodeTokenScope {
  7    One(String),
  8    Many(Vec<String>),
  9}
 10
 11#[derive(Debug, Deserialize)]
 12pub struct VsCodeTokenColor {
 13    pub scope: Option<VsCodeTokenScope>,
 14    pub settings: VsCodeTokenColorSettings,
 15}
 16
 17#[derive(Debug, Deserialize)]
 18pub struct VsCodeTokenColorSettings {
 19    pub foreground: Option<String>,
 20    pub background: Option<String>,
 21    #[serde(rename = "fontStyle")]
 22    pub font_style: Option<String>,
 23}
 24
 25#[derive(Debug, PartialEq, Copy, Clone, EnumIter)]
 26pub enum ZedSyntaxToken {
 27    SyntaxAttribute,
 28    SyntaxBoolean,
 29    SyntaxComment,
 30    SyntaxCommentDoc,
 31    SyntaxConstant,
 32    SyntaxConstructor,
 33    SyntaxEmbedded,
 34    SyntaxEmphasis,
 35    SyntaxEmphasisStrong,
 36    SyntaxEnum,
 37    SyntaxFunction,
 38    SyntaxHint,
 39    SyntaxKeyword,
 40    SyntaxLabel,
 41    SyntaxLinkText,
 42    SyntaxLinkUri,
 43    SyntaxNumber,
 44    SyntaxOperator,
 45    SyntaxPredictive,
 46    SyntaxPreproc,
 47    SyntaxPrimary,
 48    SyntaxProperty,
 49    SyntaxPunctuation,
 50    SyntaxPunctuationBracket,
 51    SyntaxPunctuationDelimiter,
 52    SyntaxPunctuationListMarker,
 53    SyntaxPunctuationSpecial,
 54    SyntaxString,
 55    SyntaxStringEscape,
 56    SyntaxStringRegex,
 57    SyntaxStringSpecial,
 58    SyntaxStringSpecialSymbol,
 59    SyntaxTag,
 60    SyntaxTextLiteral,
 61    SyntaxTitle,
 62    SyntaxType,
 63    SyntaxVariable,
 64    SyntaxVariableSpecial,
 65    SyntaxVariant,
 66}
 67
 68impl std::fmt::Display for ZedSyntaxToken {
 69    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 70        use ZedSyntaxToken::*;
 71
 72        write!(
 73            f,
 74            "{}",
 75            match self {
 76                SyntaxAttribute => "attribute",
 77                SyntaxBoolean => "boolean",
 78                SyntaxComment => "comment",
 79                SyntaxCommentDoc => "comment.doc",
 80                SyntaxConstant => "constant",
 81                SyntaxConstructor => "constructor",
 82                SyntaxEmbedded => "embedded",
 83                SyntaxEmphasis => "emphasis",
 84                SyntaxEmphasisStrong => "emphasis.strong",
 85                SyntaxEnum => "enum",
 86                SyntaxFunction => "function",
 87                SyntaxHint => "hint",
 88                SyntaxKeyword => "keyword",
 89                SyntaxLabel => "label",
 90                SyntaxLinkText => "link_text",
 91                SyntaxLinkUri => "link_uri",
 92                SyntaxNumber => "number",
 93                SyntaxOperator => "operator",
 94                SyntaxPredictive => "predictive",
 95                SyntaxPreproc => "preproc",
 96                SyntaxPrimary => "primary",
 97                SyntaxProperty => "property",
 98                SyntaxPunctuation => "punctuation",
 99                SyntaxPunctuationBracket => "punctuation.bracket",
100                SyntaxPunctuationDelimiter => "punctuation.delimiter",
101                SyntaxPunctuationListMarker => "punctuation.list_marker",
102                SyntaxPunctuationSpecial => "punctuation.special",
103                SyntaxString => "string",
104                SyntaxStringEscape => "string.escape",
105                SyntaxStringRegex => "string.regex",
106                SyntaxStringSpecial => "string.special",
107                SyntaxStringSpecialSymbol => "string.special.symbol",
108                SyntaxTag => "tag",
109                SyntaxTextLiteral => "text.literal",
110                SyntaxTitle => "title",
111                SyntaxType => "type",
112                SyntaxVariable => "variable",
113                SyntaxVariableSpecial => "variable.special",
114                SyntaxVariant => "variant",
115            }
116        )
117    }
118}
119
120impl ZedSyntaxToken {
121    pub fn to_vscode(&self) -> &'static str {
122        use ZedSyntaxToken::*;
123
124        match self {
125            SyntaxAttribute => "entity.other.attribute-name",
126            SyntaxBoolean => "constant.language",
127            SyntaxComment => "comment",
128            SyntaxCommentDoc => "comment.block.documentation",
129            SyntaxConstant => "constant.character",
130            SyntaxConstructor => "entity.name.function.definition.special.constructor",
131            SyntaxEmbedded => "embedded",
132            SyntaxEmphasis => "emphasis",
133            SyntaxEmphasisStrong => "emphasis.strong",
134            SyntaxEnum => "support.type.enum",
135            SyntaxFunction => "entity.name.function",
136            SyntaxHint => "hint",
137            SyntaxKeyword => "keyword",
138            SyntaxLabel => "label",
139            SyntaxLinkText => "link_text",
140            SyntaxLinkUri => "link_uri",
141            SyntaxNumber => "number",
142            SyntaxOperator => "operator",
143            SyntaxPredictive => "predictive",
144            SyntaxPreproc => "preproc",
145            SyntaxPrimary => "primary",
146            SyntaxProperty => "variable.object.property", //"variable.other.field"
147            SyntaxPunctuation => "punctuation",
148            SyntaxPunctuationBracket => "punctuation.bracket",
149            SyntaxPunctuationDelimiter => "punctuation.delimiter",
150            SyntaxPunctuationListMarker => "punctuation.list_marker",
151            SyntaxPunctuationSpecial => "punctuation.special",
152            SyntaxString => "string",
153            SyntaxStringEscape => "string.escape",
154            SyntaxStringRegex => "string.regex",
155            SyntaxStringSpecial => "string.special",
156            SyntaxStringSpecialSymbol => "string.special.symbol",
157            SyntaxTag => "tag",
158            SyntaxTextLiteral => "text.literal",
159            SyntaxTitle => "title",
160            SyntaxType => "entity.name.type",
161            SyntaxVariable => "variable.language",
162            SyntaxVariableSpecial => "variable.special",
163            SyntaxVariant => "variant",
164        }
165    }
166}