Merge PR #275: Add Dart, Scala, SCSS, SASS, Elixir, Lua, Perl language detection

Thank you @PaawanBarach for this excellent contribution! 🎉

Adds pattern-based language detection for 7 new programming languages with comprehensive test coverage.

 70 regex patterns with smart weight distribution
 Framework-specific patterns (Flutter, case classes, mixins)
 7 new tests, all passing (30/30 total)
 No regressions, backward compatible

This resolves #165 and significantly expands our language support!
This commit is contained in:
yusyus
2026-02-04 21:00:49 +03:00
committed by GitHub
2 changed files with 282 additions and 2 deletions

View File

@@ -310,6 +310,67 @@ LANGUAGE_PATTERNS: dict[str, list[tuple[str, int]]] = {
(r"\b_ready\s*\(", 4),
(r"\b_process\s*\(", 4),
],
"dart": [
(r"\bimport\s+['\"]package:", 5),
(r"\bclass\s+\w+\s+extends\s+StatelessWidget", 5),
(r"\bclass\s+\w+\s+extends\s+StatefulWidget", 5),
(r"@override\b", 4),
(r"\bWidget\s+build\s*\(", 5),
(r"\bimport\s+['\"]dart:", 5),
(r"\bfinal\s+\w+\s+\w+;", 4),
(r"=>\s*\w+\(", 4),
(r"\basync\s*\{", 3),
(r"\bawait\s+", 3),
(r"\bsetState\s*\(", 4),
(r"\bvoid\s+main\s*\(", 3),
],
"scala": [
(r"\bcase\s+class\s+\w+", 5),
(r"\btrait\s+\w+", 5),
(r"\bdef\s+\w+[^:]*:\s*\w+\s*=", 5),
(r"\bimport\s+scala\.", 4),
(r"\bmatch\s*\{", 4),
(r"\bval\s+\w+\s*:\s*\w+\s*=", 4),
(r"\bobject\s+\w+", 5),
(r"=>", 3),
(r"\bdef\s+\w+\[\w+\]", 4),
(r"\bextends\s+\w+", 2),
],
"elixir": [
(r"\bdefmodule\s+[A-Z]", 5),
(r"\bdef\s+\w+\s+do\b", 5),
(r"\bdefp\s+\w+", 5),
(r"\|>", 5),
(r"\buse\s+[A-Z]", 4),
(r"\balias\s+[A-Z]", 4),
(r"#\{", 4),
(r"@[\w_]+", 3),
(r"\bcase\s+\w+\s+do\b", 3),
],
"lua": [
(r"\blocal\s+\w+\s*=", 5),
(r"\.\.\.(?!\.)", 5),
(r"\brepeat\b.*\buntil\b", 5),
(r"~=", 4),
(r"\belseif\b", 4),
(r"\bthen\b", 3),
(r"\bfunction\s+\w+\s*\(", 3),
(r"\bend\b", 2),
],
"perl": [
(r"\bmy\s+\$\w+", 5),
(r"\buse\s+strict", 5),
(r"\buse\s+warnings", 5),
(r"\bsub\s+\w+\s*\{", 5),
(r"\bchomp\s*\(", 5),
(r"@\w+\s*=", 5),
(r"%\w+\s*=", 5),
(r"\$\w+\s*=~\s*/", 4),
(r"\$[0-9]+", 4),
(r"->", 3),
],
# ===== Markup/Config Languages =====
"html": [
(r"<!DOCTYPE\s+html>", 5),
@@ -327,6 +388,28 @@ LANGUAGE_PATTERNS: dict[str, list[tuple[str, int]]] = {
(r"#[\w-]+\s*\{", 2),
(r"@import", 2),
],
"scss": [
(r"\$[\w-]+\s*:", 5),
(r"@mixin\s+[\w-]+", 5),
(r"@include\s+[\w-]+", 5),
(r"@extend\s+", 4),
(r"@function\s+[\w-]+", 4),
(r"&[:\.]", 4),
(r"#\{", 4),
(r"@import\s+['\"]", 3),
(r"@if\s+", 5),
(r"@for\s+", 5),
(r"@each\s+", 5),
],
"sass": [
(r"\$[\w-]+\s*:", 5),
(r"=[\w-]+", 5),
(r"\+[\w-]+", 5),
(r"@for\s+.+\s+through\s+", 5),
(r"@mixin\s+[\w-]+", 4),
(r"@if\s+", 4),
(r"^\s{2,}[\w-]+:", 3),
],
"json": [
(r"^\s*\{", 3),
(r"^\s*\[", 3),