@@ -4,6 +4,7 @@ use owo_colors::{
44};
55use std::fmt;
66use std::fmt::Write;
7+ use std::str::FromStr;
78use strum::EnumIter;
89
910pub struct Colors {
@@ -17,54 +18,48 @@ pub struct Colors {
1718pub enum Language {
1819 {% for language, attrs in languages -%}
1920 {% if attrs.serialization %}#[clap(name="{{ attrs.serialization }}")]{% endif -%}
20- {{ language }},
21+ {{ language|enumify }},
2122 {% endfor %}
2223}
2324
2425impl fmt::Display for Language {
2526 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2627 match self {
2728 {% for language, _ in languages -%}
28- Self::{{ language }} => write!(f, "{}", tokei::LanguageType:: {{ language }}.name() ),
29+ Self::{{ language|enumify }} => write!(f, "{}", r#" {{ language }}"# ),
2930 {% endfor %}
3031 }
3132 }
3233}
3334
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 = ();
4438
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 {
4841 {% for language, _ in languages -%}
49- Language:: {{ language }} => tokei::LanguageType:: {{ language }},
42+ r#" {{ language }}"# => Self:: {{ language|enumify }},
5043 {% endfor %}
51- }
44+ _ => unimplemented!("Language {:?}", s),
45+ };
46+ Ok(lang)
5247 }
5348}
5449
5550impl Language {
5651 pub fn get_ascii_art(&self) -> &'static str {
5752 match self {
5853 {% for language, attrs in languages -%}
59- Language::{{ language }} => "{{ attrs.ascii | addslashes }}",
54+ Language::{{ language|enumify }} => "{{ attrs.ascii | addslashes }}",
6055 {% endfor %}
6156 }
6257 }
6358
6459 pub fn get_colors(&self, true_color: bool) -> Vec<DynColors> {
6560 let colors = match self {
6661 {% for language, attrs in languages -%}
67- Language::{{ language }} => Colors {
62+ Language::{{ language|enumify }} => Colors {
6863 basic_colors: vec![{%- for color in attrs.colors.ansi -%}Ansi(AnsiColors::{{ color | capitalize | replace(from="White", to="Default") }}),{% endfor %}],
6964 true_colors: {% if attrs.colors.hex -%}
7065 Some(vec![
@@ -87,41 +82,18 @@ impl Language {
8782 match self {
8883 {% for language, attrs in languages -%}
8984 {% 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 }}),
9186 {% endfor %}
9287 }
9388 }
9489}
9590
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-
11991{% for language, attrs in languages -%}
12092 {% if attrs.colors.rgb %}
12193 {% set ansi_length = attrs.colors.ansi | length -%}
12294 {% set rgb_length = attrs.colors.rgb | length %}
12395 {% 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"# );
12597 {% endif %}
12698 {% endif -%}
12799{% endfor -%}
@@ -135,14 +107,14 @@ fn __stats_loc(language_type: &tokei::LanguageType, stats: &tokei::CodeStats) ->
135107 {% set lines = attrs.ascii | split(pat="\n") -%}
136108 {% set height = lines | length -%}
137109 {% 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 }}"# );
139111 {% endif -%}
140112
141113 {% for line in lines -%}
142114 {% set cleaned_line = line | strip_color_tokens -%}
143115 {% set width = cleaned_line | length -%}
144116 {% 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"# );
146118 {% endif -%}
147119 {% endfor -%}
148120{% endfor -%}
0 commit comments