summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2026-06-07 20:53:20 +0300
committerA Farzat <a@farzat.xyz>2026-06-07 20:58:37 +0300
commit99d21463574bb88fa86f176c2e4ad154be5e1353 (patch)
tree9404c38049ab95082eb36814730363a2dbc9de35 /src/util
parent2e8b176c5f4d93bc614cb9ff6808e5011bb2e103 (diff)
downloadrepo2markdown-99d21463574bb88fa86f176c2e4ad154be5e1353.tar.gz
repo2markdown-99d21463574bb88fa86f176c2e4ad154be5e1353.zip
Refactor language detection in a util module
Diffstat (limited to 'src/util')
-rw-r--r--src/util/language.rs33
-rw-r--r--src/util/mod.rs1
2 files changed, 34 insertions, 0 deletions
diff --git a/src/util/language.rs b/src/util/language.rs
new file mode 100644
index 0000000..fae7bf9
--- /dev/null
+++ b/src/util/language.rs
@@ -0,0 +1,33 @@
+use std::path::Path;
+
+pub fn detect_language(filename: &Path, contents: &str) -> &'static str {
+ detect_from_extension(filename)
+ .or_else(|| detect_from_shebang(contents))
+ .unwrap_or("")
+}
+
+fn detect_from_extension(filename: &Path) -> Option<&'static str> {
+ let ext = filename
+ .extension()
+ .and_then(|e| e.to_str())
+ .map(|e| e.to_ascii_lowercase());
+ let ext_str = ext.as_deref();
+ match ext_str {
+ Some("rs") => Some("rust"),
+ Some("py") => Some("python"),
+ Some("json") => Some("json"),
+ _ => None,
+ }
+}
+
+fn detect_from_shebang(contents: &str) -> Option<&'static str> {
+ if let Some(first_line) = contents.lines().next() {
+ if first_line.contains("python") {
+ return Some("python");
+ }
+ if first_line.contains("bash") {
+ return Some("bash");
+ }
+ }
+ None
+}
diff --git a/src/util/mod.rs b/src/util/mod.rs
index 1ba817e..5595a45 100644
--- a/src/util/mod.rs
+++ b/src/util/mod.rs
@@ -1 +1,2 @@
+pub mod language;
pub mod path_display;