5个版本

0.1.5 2020年2月22日
0.1.4 2020年2月13日

#1204 in 算法

Download history 28/week @ 2024-03-11 15/week @ 2024-03-18 16/week @ 2024-03-25 53/week @ 2024-04-01 31/week @ 2024-04-08 22/week @ 2024-04-15 25/week @ 2024-04-22 23/week @ 2024-04-29 24/week @ 2024-05-06 47/week @ 2024-05-13 28/week @ 2024-05-20 23/week @ 2024-05-27 28/week @ 2024-06-03 21/week @ 2024-06-10 18/week @ 2024-06-17 29/week @ 2024-06-24

97 每月下载量
6 个crate中使用 (2 直接使用)

MIT 许可证

18KB
125

detect-lang

Build Status Latest Version Docs License

这个crate是一个工具,用于从路径和文件扩展名中识别编程语言(和相关文件)的名称。

不是一个用于检测自然语言的crate。

用法

将此内容添加到你的 Cargo.toml

[dependencies]
detect-lang = "0.1"

版本

版本说明可在仓库中的CHANGELOG.md中找到。

路径和扩展名

可以使用 from_path 从路径中识别语言,或者使用 from_extension 直接从扩展名中识别。

use detect_lang::from_path;
assert_eq!(from_path("foo.rs").unwrap().name(), "Rust");
assert_eq!(from_path("foo.md").unwrap().name(), "Markdown");

use detect_lang::from_extension;
assert_eq!(from_extension("rs").unwrap().name(), "Rust");
assert_eq!(from_extension("md").unwrap().name(), "Markdown");

// The case is ignored
assert_eq!(from_path("foo.jSoN").unwrap().name(), "JSON");
assert_eq!(from_extension("jSoN").unwrap().name(), "JSON");

语言ID

简而言之,语言 idname 的小写版本。然而,它也替换了符号,使其可以作为 URL别名 使用。

例如,foo.hpp 被识别为语言名称 C++ 和语言ID cpp

use detect_lang::from_path;
assert_eq!(from_path("foo.rs").unwrap().id(), "rust");
assert_eq!(from_path("foo.cpp").unwrap().id(), "cpp");
assert_eq!(from_path("foo.hpp").unwrap().id(), "cpp");

use detect_lang::from_extension;
assert_eq!(from_extension("rs").unwrap().id(), "rust");
assert_eq!(from_extension("cpp").unwrap().id(), "cpp");
assert_eq!(from_extension("hpp").unwrap().id(), "cpp");

// The case is ignored
assert_eq!(from_path("foo.jSoN").unwrap().id(), "json");
assert_eq!(from_extension("jSoN").unwrap().id(), "json");

始终小写

如果扩展名保证始终是小写的,那么可以考虑使用 from_lowercase_extension 以避免分配和转换为小写。

use detect_lang::{from_extension, from_lowercase_extension, Language};

assert_eq!(from_lowercase_extension("json"), Some(Language("JSON", "json")));
assert_eq!(from_lowercase_extension("jSoN"), None);

assert_eq!(from_extension("json"), Some(Language("JSON", "json")));
assert_eq!(from_extension("jSoN"), Some(Language("JSON", "json")));

匹配示例

use std::path::Path;
use detect_lang::{from_path, Language};

let path = Path::new("foo.rs");
match from_path(path) {
    //   Language(name, id)
    Some(Language(_, "rust")) => println!("This is Rust"),
    Some(Language(..))        => println!("Well it's not Rust"),
    None                      => println!("Ehh, what?"),
}

无运行时依赖