From 85503da5208ad91a6139094abe254ece42636a4d Mon Sep 17 00:00:00 2001 From: holly sparkles Date: Sun, 7 Jan 2024 15:21:33 +0100 Subject: [PATCH] refactor(lang): move language definitions to core --- src/lib.rs | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 60 ++---------------------------------------------------------- 2 files changed, 83 insertions(+), 58 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index f436c88..66520c7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -62,6 +62,87 @@ pub mod core { self } + + /// Loads a set of built-in language definitions into the collection. + /// + /// The `load_builtins` function is used to add predefined language definitions to the + /// `LanguageDefinitions` collection. This can be convenient for initializing the collection + /// with common languages and extensions. + /// + /// # Parameters + /// + /// - `self`: The current `LanguageDefinitions` instance. + /// + /// # Returns + /// + /// A new `LanguageDefinitions` instance with the built-in language definitions added. + /// + /// # Examples + /// + /// ``` + /// use smolguess::core::{LanguageDefinition, LanguageDefinitions}; + /// + /// // Load built-in language definitions + /// let languages = LanguageDefinitions::default().load_builtins(); + /// + /// assert_eq!(languages.items.iter().any(|lang| lang.name.eq("Rust")), true); + /// ``` + pub fn load_builtins(self) -> Self { + self.insert(("Assembly", "asm")) + .insert(("Batchfile", "bat")) + .insert(("C", "c")) + .insert(("C#", "cs")) + .insert(("C++", "cpp")) + .insert(("Clojure", "clj")) + .insert(("CMake", "cmake")) + .insert(("COBOL", "cbl")) + .insert(("CoffeeScript", "coffee")) + .insert(("CSS", "css")) + .insert(("CSV", "csv")) + .insert(("Dart", "dart")) + .insert(("DM", "dm")) + .insert(("Dockerfile", "dockerfile")) + .insert(("Elixir", "ex")) + .insert(("Erlang", "erl")) + .insert(("Fortran", "f90")) + .insert(("Go", "go")) + .insert(("Groovy", "groovy")) + .insert(("Haskell", "hs")) + .insert(("HTML", "html")) + .insert(("INI", "ini")) + .insert(("Java", "java")) + .insert(("JavaScript", "js")) + .insert(("JSON", "json")) + .insert(("Julia", "jl")) + .insert(("Kotlin", "kt")) + .insert(("Lisp", "lisp")) + .insert(("Lua", "lua")) + .insert(("Makefile", "makefile")) + .insert(("Markdown", "md")) + .insert(("Matlab", "matlab")) + .insert(("Objective-C", "mm")) + .insert(("OCaml", "ml")) + .insert(("Pascal", "pas")) + .insert(("Perl", "pm")) + .insert(("PHP", "php")) + .insert(("PowerShell", "ps1")) + .insert(("Prolog", "prolog")) + .insert(("Python", "py")) + .insert(("R", "r")) + .insert(("Ruby", "rb")) + .insert(("Rust", "rs")) + .insert(("Scala", "scala")) + .insert(("Shell", "sh")) + .insert(("SQL", "sql")) + .insert(("Swift", "swift")) + .insert(("TeX", "tex")) + .insert(("TOML", "toml")) + .insert(("TypeScrpit", "ts")) + .insert(("Verilog", "v")) + .insert(("Visual Basic", "vba")) + .insert(("XML", "xml")) + .insert(("YAML", "yaml")) + } } /// Represents a language definition, consisting of a name and its corresponding file extension. diff --git a/src/main.rs b/src/main.rs index 569a7a0..eb4fb61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,64 +1,8 @@ use smolguess::core::LanguageDefinitions; fn main() { - // TODO: move to a library - let languages = LanguageDefinitions::default() - .insert(("Assembly", "asm")) - .insert(("Batchfile", "bat")) - .insert(("C", "c")) - .insert(("C#", "cs")) - .insert(("C++", "cpp")) - .insert(("Clojure", "clj")) - .insert(("CMake", "cmake")) - .insert(("COBOL", "cbl")) - .insert(("CoffeeScript", "coffee")) - .insert(("CSS", "css")) - .insert(("CSV", "csv")) - .insert(("Dart", "dart")) - .insert(("DM", "dm")) - .insert(("Dockerfile", "dockerfile")) - .insert(("Elixir", "ex")) - .insert(("Erlang", "erl")) - .insert(("Fortran", "f90")) - .insert(("Go", "go")) - .insert(("Groovy", "groovy")) - .insert(("Haskell", "hs")) - .insert(("HTML", "html")) - .insert(("INI", "ini")) - .insert(("Java", "java")) - .insert(("JavaScript", "js")) - .insert(("JSON", "json")) - .insert(("Julia", "jl")) - .insert(("Kotlin", "kt")) - .insert(("Lisp", "lisp")) - .insert(("Lua", "lua")) - .insert(("Makefile", "makefile")) - .insert(("Markdown", "md")) - .insert(("Matlab", "matlab")) - .insert(("Objective-C", "mm")) - .insert(("OCaml", "ml")) - .insert(("Pascal", "pas")) - .insert(("Perl", "pm")) - .insert(("PHP", "php")) - .insert(("PowerShell", "ps1")) - .insert(("Prolog", "prolog")) - .insert(("Python", "py")) - .insert(("R", "r")) - .insert(("Ruby", "rb")) - .insert(("Rust", "rs")) - .insert(("Scala", "scala")) - .insert(("Shell", "sh")) - .insert(("SQL", "sql")) - .insert(("Swift", "swift")) - .insert(("TeX", "tex")) - .insert(("TOML", "toml")) - .insert(("TypeScrpit", "ts")) - .insert(("Verilog", "v")) - .insert(("Visual Basic", "vba")) - .insert(("XML", "xml")) - .insert(("YAML", "yaml")); - - languages + LanguageDefinitions::default() + .load_builtins() .items .iter() .for_each(|def| println!("{} has the extension {}", def.name, def.extension)) -- libgit2 1.7.2