feat(syntax): support phoenix file extensions (#278)

* feat(syntax): support phoenix file extensions

* feat(syntax): add elixir codemirror language
This commit is contained in:
shekohex
2026-02-03 21:20:57 +02:00
committed by GitHub
parent c119d89084
commit 8b3765e362
4 changed files with 42 additions and 7 deletions
@@ -11,6 +11,7 @@ import { sql } from '@codemirror/lang-sql';
import { xml } from '@codemirror/lang-xml';
import { yaml as yamlLanguage } from '@codemirror/lang-yaml';
import { rust } from '@codemirror/lang-rust';
import { elixir } from 'codemirror-lang-elixir';
import { Language, LanguageDescription, StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';
import { tags as t } from '@lezer/highlight';
@@ -20,6 +21,7 @@ import { diff } from '@codemirror/legacy-modes/mode/diff';
import { dockerFile } from '@codemirror/legacy-modes/mode/dockerfile';
import { ruby } from '@codemirror/legacy-modes/mode/ruby';
import { properties } from '@codemirror/legacy-modes/mode/properties';
import { erlang } from '@codemirror/legacy-modes/mode/erlang';
const shellLanguage = StreamLanguage.define(shell);
const tomlLanguage = StreamLanguage.define(toml);
@@ -27,6 +29,9 @@ const diffLanguage = StreamLanguage.define(diff);
const dockerfileLanguage = StreamLanguage.define(dockerFile);
const rubyLanguage = StreamLanguage.define(ruby);
const propertiesLanguage = StreamLanguage.define(properties);
const elixirSupport = elixir();
const elixirLanguage = elixirSupport.language;
const erlangLanguage = StreamLanguage.define(erlang);
function codeBlockLanguageResolver(info: string): Language | LanguageDescription | null {
const normalized = info.trim().toLowerCase();
@@ -76,6 +81,18 @@ function codeBlockLanguageResolver(info: string): Language | LanguageDescription
case 'rs':
case 'rust':
return rust().language;
case 'ex':
case 'exs':
case 'elixir':
return elixirLanguage;
case 'erl':
case 'hrl':
case 'erlang':
return erlangLanguage;
case 'heex':
case 'eex':
case 'leex':
return html().language;
default:
return LanguageDescription.matchLanguageName(languages, normalized, true);
}
@@ -201,6 +218,18 @@ export function languageByExtension(filePath: string): Extension | null {
case 'gemspec':
return rubyLanguage;
case 'ex':
case 'exs':
return elixirSupport;
case 'erl':
case 'hrl':
return erlangLanguage;
case 'eex':
case 'leex':
case 'heex':
return html();
default:
return null;
}
+3 -3
View File
@@ -473,9 +473,9 @@ export function getLanguageFromExtension(filePath: string): string | null {
// Elixir/Erlang
'ex': 'elixir',
'exs': 'elixir',
'eex': 'elixir',
'heex': 'elixir',
'leex': 'elixir',
'eex': 'html',
'heex': 'html',
'leex': 'html',
'erl': 'erlang',
'hrl': 'erlang',