5个版本
0.1.5 | 2020年2月22日 |
---|---|
0.1.4 | 2020年2月13日 |
#1204 in 算法
97 每月下载量
在 6 个crate中使用 (2 直接使用)
18KB
125 行
detect-lang
这个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
简而言之,语言 id
是 name
的小写版本。然而,它也替换了符号,使其可以作为 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?"),
}