feat: add identifying repository files
Diff
src/core/mod.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++-
src/main.rs | 26 ++++++++++++++++++++------
2 files changed, 71 insertions(+), 7 deletions(-)
@@ -1,3 +1,5 @@
use std::path::PathBuf;
@@ -25,6 +27,54 @@ pub struct LanguageDefinitions {
}
impl LanguageDefinitions {
pub fn identify_file(&self, file: PathBuf) -> Option<LanguageDefinition> {
self.items
.iter()
.find(|lang| {
lang.extension.eq(&file
.extension()
.unwrap_or_else(|| file.file_name().expect("Unable to get file name"))
.to_string_lossy()
.to_string()
.to_lowercase())
})
.cloned()
}
@@ -174,7 +224,7 @@ impl LanguageDefinitions {
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct LanguageDefinition {
pub name: String,
pub extension: String,
@@ -1,6 +1,9 @@
use std::{env, path::PathBuf};
use smolguess::{core::LanguageDefinitions, repository};
use smolguess::{
core::{LanguageDefinition, LanguageDefinitions},
repository,
};
fn main() {
let args: Vec<String> = env::args().collect();
@@ -12,10 +15,21 @@ fn main() {
let files = repository::get_bare_repository_files(PathBuf::from(&args[1]));
println!("{:?}", files);
let definitions = LanguageDefinitions::default().load_builtins();
LanguageDefinitions::default()
.load_builtins()
.items
.iter()
.for_each(|def| println!("{} has the extension {}", def.name, def.extension));
for file in files {
println!(
"{:?}",
definitions.identify_file(file.clone()).unwrap_or_else(|| {
let extension = file
.extension()
.unwrap_or(file.file_name().unwrap_or_default())
.to_string_lossy()
.to_string()
.to_lowercase();
LanguageDefinition::new("Unknown", &extension)
})
);
}
}