@@ -4,6 +4,7 @@ use owo_colors::{
4
4
};
5
5
use std::fmt;
6
6
use std::fmt::Write;
7
+ use std::str::FromStr;
7
8
use strum::EnumIter;
8
9
9
10
pub struct Colors {
@@ -17,54 +18,48 @@ pub struct Colors {
17
18
pub enum Language {
18
19
{% for language, attrs in languages -%}
19
20
{% if attrs.serialization %}#[clap(name="{{ attrs.serialization }}")]{% endif -%}
20
- {{ language }},
21
+ {{ language|enumify }},
21
22
{% endfor %}
22
23
}
23
24
24
25
impl fmt::Display for Language {
25
26
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
26
27
match self {
27
28
{% for language, _ in languages -%}
28
- Self::{{ language }} => write!(f, "{}", tokei::LanguageType:: {{ language }}.name() ),
29
+ Self::{{ language|enumify }} => write!(f, "{}", r#" {{ language }}"# ),
29
30
{% endfor %}
30
31
}
31
32
}
32
33
}
33
34
34
- impl From<tokei::LanguageType> for Language {
35
- fn from(language: tokei::LanguageType) -> Self {
36
- match language {
37
- {% for language, _ in languages -%}
38
- tokei::LanguageType::{{ language }} => Self::{{ language }},
39
- {% endfor %}
40
- _ => unimplemented!("Language {:?}", language),
41
- }
42
- }
43
- }
35
+ impl FromStr for Language {
36
+ // NOTE Right now we just panic, matching old behavior
37
+ type Err = ();
44
38
45
- impl From<Language> for tokei::LanguageType {
46
- fn from(language: Language) -> Self {
47
- match language {
39
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
40
+ let lang = match s {
48
41
{% for language, _ in languages -%}
49
- Language:: {{ language }} => tokei::LanguageType:: {{ language }},
42
+ r#" {{ language }}"# => Self:: {{ language|enumify }},
50
43
{% endfor %}
51
- }
44
+ _ => unimplemented!("Language {:?}", s),
45
+ };
46
+ Ok(lang)
52
47
}
53
48
}
54
49
55
50
impl Language {
56
51
pub fn get_ascii_art(&self) -> &'static str {
57
52
match self {
58
53
{% for language, attrs in languages -%}
59
- Language::{{ language }} => "{{ attrs.ascii | addslashes }}",
54
+ Language::{{ language|enumify }} => "{{ attrs.ascii | addslashes }}",
60
55
{% endfor %}
61
56
}
62
57
}
63
58
64
59
pub fn get_colors(&self, true_color: bool) -> Vec<DynColors> {
65
60
let colors = match self {
66
61
{% for language, attrs in languages -%}
67
- Language::{{ language }} => Colors {
62
+ Language::{{ language|enumify }} => Colors {
68
63
basic_colors: vec![{%- for color in attrs.colors.ansi -%}Ansi(AnsiColors::{{ color | capitalize | replace(from="White", to="Default") }}),{% endfor %}],
69
64
true_colors: {% if attrs.colors.hex -%}
70
65
Some(vec![
@@ -87,41 +82,18 @@ impl Language {
87
82
match self {
88
83
{% for language, attrs in languages -%}
89
84
{% set rgb = attrs.colors.chip | hex_to_rgb -%}
90
- Language::{{ language }} => Rgb({{ rgb.r }}, {{ rgb.g }}, {{ rgb.b }}),
85
+ Language::{{ language|enumify }} => Rgb({{ rgb.r }}, {{ rgb.g }}, {{ rgb.b }}),
91
86
{% endfor %}
92
87
}
93
88
}
94
89
}
95
90
96
- fn __loc(language_type: &tokei::LanguageType, language: &tokei::Language) -> usize {
97
- match language_type {
98
- {% for language, attrs in languages -%}
99
- {%- set line_types = attrs.line_types | default(value=['code']) -%}
100
- tokei::LanguageType::{{ language }} => language.{{ line_types.0 }}{% for line_type in line_types | slice(start=1) %} + language.{{ line_type }}{% endfor %},
101
- {% endfor %}
102
- _ => unimplemented!("Language Type {:?}", language_type),
103
- }
104
- }
105
-
106
-
107
- fn __stats_loc(language_type: &tokei::LanguageType, stats: &tokei::CodeStats) -> usize {
108
- match language_type {
109
- {% for language, attrs in languages -%}
110
- {%- set line_types = attrs.line_types | default(value=['code']) -%}
111
- {%- if attrs.line_types -%}
112
- tokei::LanguageType::{{ language }} => stats.{{ line_types.0 }}{% for line_type in line_types | slice(start=1) %} + stats.{{ line_type }}{% endfor %},
113
- {% endif -%}
114
- {% endfor %}
115
- _ => stats.code
116
- }
117
- }
118
-
119
91
{% for language, attrs in languages -%}
120
92
{% if attrs.colors.rgb %}
121
93
{% set ansi_length = attrs.colors.ansi | length -%}
122
94
{% set rgb_length = attrs.colors.rgb | length %}
123
95
{% if ansi_length != rgb_length %}
124
- compile_error!("{{ language }}: ansi and rgb colors must be the same length");
96
+ compile_error!(r# "{{ language }}: ansi and rgb colors must be the same length"# );
125
97
{% endif %}
126
98
{% endif -%}
127
99
{% endfor -%}
@@ -135,14 +107,14 @@ fn __stats_loc(language_type: &tokei::LanguageType, stats: &tokei::CodeStats) ->
135
107
{% set lines = attrs.ascii | split(pat="\n") -%}
136
108
{% set height = lines | length -%}
137
109
{% if height > max_height %}
138
- compile_error!("{{ language }}: ascii art must have {{ max_height - 1 }} or less lines, has {{ height }}");
110
+ compile_error!(r# "{{ language }}: ascii art must have {{ max_height - 1 }} or less lines, has {{ height }}"# );
139
111
{% endif -%}
140
112
141
113
{% for line in lines -%}
142
114
{% set cleaned_line = line | strip_color_tokens -%}
143
115
{% set width = cleaned_line | length -%}
144
116
{% if width > max_width %}
145
- compile_error!("{{ language }}: ascii art line {{ loop.index }} must be {{ max_width }} or less characters wide");
117
+ compile_error!(r# "{{ language }}: ascii art line {{ loop.index }} must be {{ max_width }} or less characters wide"# );
146
118
{% endif -%}
147
119
{% endfor -%}
148
120
{% endfor -%}
0 commit comments