Specify the --sort option in the configuration files (#550)

* Specify the --sort option in the configuration files

* Let --sort option be case insensitive in configuration files

* style: inline sort variable

* Add an example of using sort to the tokei.example.toml
This commit is contained in:
Theo 2020-06-02 14:03:54 +02:00 committed by GitHub
parent 8e37ba8e64
commit a69e16b225
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 1 deletions

View file

@ -1,6 +1,7 @@
use std::{env, fs, path::PathBuf};
use crate::language::LanguageType;
use crate::sort::Sort;
/// A configuration struct for how [`Languages::get_statistics`] searches and
/// counts languages.
@ -31,6 +32,8 @@ pub struct Config {
/// Whether to treat doc strings in languages as comments. *Default:*
/// `false`.
pub treat_doc_strings_as_comments: Option<bool>,
/// Sort languages. *Default:* `None`.
pub sort: Option<Sort>,
/// Filters languages searched to just those provided. E.g. A directory
/// containing `C`, `Cpp`, and `Rust` with a `Config.types` of `[Cpp, Rust]`
/// will count only `Cpp` and `Rust`. *Default:* `None`.
@ -96,6 +99,7 @@ impl Config {
treat_doc_strings_as_comments: current_dir.treat_doc_strings_as_comments.or(home_dir
.treat_doc_strings_as_comments
.or(conf_dir.treat_doc_strings_as_comments)),
sort: current_dir.sort.or(home_dir.sort.or(conf_dir.sort)),
types: current_dir.types.or(home_dir.types.or(conf_dir.types)),
no_ignore: current_dir
.no_ignore

View file

@ -72,7 +72,7 @@ fn main() -> Result<(), Box<dyn Error>> {
print_header(&mut stdout, &row, columns)?;
if let Some(sort_category) = cli.sort {
if let Some(sort_category) = cli.sort.or(config.sort) {
for (_, ref mut language) in &mut languages {
language.sort_by(sort_category)
}

View file

@ -1,5 +1,7 @@
use std::{borrow::Cow, str::FromStr};
use serde::de::{self, Deserialize, Deserializer};
/// Used for sorting languages.
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub enum Sort {
@ -30,6 +32,17 @@ impl FromStr for Sort {
}
}
impl<'de> Deserialize<'de> for Sort {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
String::deserialize(deserializer)?
.parse()
.map_err(de::Error::custom)
}
}
impl<'a> From<Sort> for Cow<'a, Sort> {
fn from(from: Sort) -> Self {
Cow::Owned(from)

View file

@ -1,5 +1,7 @@
# The width of the terminal output in columns.
columns = 80
# Sort languages based on the specified column.
sort = "lines"
# If set, tokei will only show the languages in `types`.
types = ["Python"]
# Any doc strings (e.g. `"""hello"""` in python) will be counted as comments.