feat(syntax): support phoenix file extensions (#278)
* feat(syntax): support phoenix file extensions * feat(syntax): add elixir codemirror language
This commit is contained in:
@@ -48,6 +48,7 @@
|
|||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^1.1.1",
|
"cmdk": "^1.1.1",
|
||||||
|
"codemirror-lang-elixir": "^4.0.0",
|
||||||
"electron-context-menu": "^4.1.1",
|
"electron-context-menu": "^4.1.1",
|
||||||
"electron-store": "^11.0.2",
|
"electron-store": "^11.0.2",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
@@ -95,7 +96,7 @@
|
|||||||
},
|
},
|
||||||
"packages/desktop": {
|
"packages/desktop": {
|
||||||
"name": "@openchamber/desktop",
|
"name": "@openchamber/desktop",
|
||||||
"version": "1.6.1",
|
"version": "1.6.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openchamber/ui": "workspace:*",
|
"@openchamber/ui": "workspace:*",
|
||||||
"@tauri-apps/plugin-notification": "^2.3.3",
|
"@tauri-apps/plugin-notification": "^2.3.3",
|
||||||
@@ -118,7 +119,7 @@
|
|||||||
},
|
},
|
||||||
"packages/ui": {
|
"packages/ui": {
|
||||||
"name": "@openchamber/ui",
|
"name": "@openchamber/ui",
|
||||||
"version": "1.6.1",
|
"version": "1.6.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.20.0",
|
"@codemirror/autocomplete": "^6.20.0",
|
||||||
"@codemirror/commands": "^6.10.1",
|
"@codemirror/commands": "^6.10.1",
|
||||||
@@ -212,7 +213,7 @@
|
|||||||
},
|
},
|
||||||
"packages/vscode": {
|
"packages/vscode": {
|
||||||
"name": "openchamber",
|
"name": "openchamber",
|
||||||
"version": "1.6.1",
|
"version": "1.6.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openchamber/ui": "workspace:*",
|
"@openchamber/ui": "workspace:*",
|
||||||
"@opencode-ai/sdk": "^1.1.48",
|
"@opencode-ai/sdk": "^1.1.48",
|
||||||
@@ -235,7 +236,7 @@
|
|||||||
},
|
},
|
||||||
"packages/web": {
|
"packages/web": {
|
||||||
"name": "@openchamber/web",
|
"name": "@openchamber/web",
|
||||||
"version": "1.6.1",
|
"version": "1.6.3",
|
||||||
"bin": {
|
"bin": {
|
||||||
"openchamber": "./bin/cli.js",
|
"openchamber": "./bin/cli.js",
|
||||||
},
|
},
|
||||||
@@ -1512,6 +1513,8 @@
|
|||||||
|
|
||||||
"cockatiel": ["cockatiel@3.2.1", "", {}, "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q=="],
|
"cockatiel": ["cockatiel@3.2.1", "", {}, "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q=="],
|
||||||
|
|
||||||
|
"codemirror-lang-elixir": ["codemirror-lang-elixir@4.0.0", "", { "dependencies": { "@codemirror/language": "^6.0.0", "lezer-elixir": "^1.0.0" } }, "sha512-mzFesxo/t6KOxwnkqVd34R/q7yk+sMtHh6vUKGAvjwHmpL7bERHB+vQAsmU/nqrndkwVeJEHWGw/z/ybfdiudA=="],
|
||||||
|
|
||||||
"color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="],
|
"color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="],
|
||||||
|
|
||||||
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
||||||
@@ -2228,6 +2231,8 @@
|
|||||||
|
|
||||||
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
|
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
|
||||||
|
|
||||||
|
"lezer-elixir": ["lezer-elixir@1.1.2", "", { "dependencies": { "@lezer/highlight": "^1.2.0", "@lezer/lr": "^1.3.0" } }, "sha512-K3yPMJcNhqCL6ugr5NkgOC1g37rcOM38XZezO9lBXy0LwWFd8zdWXfmRbY829vZVk0OGCQoI02yDWp9FF2OWZA=="],
|
||||||
|
|
||||||
"lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="],
|
"lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="],
|
||||||
|
|
||||||
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="],
|
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="],
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^1.1.1",
|
"cmdk": "^1.1.1",
|
||||||
|
"codemirror-lang-elixir": "^4.0.0",
|
||||||
"electron-context-menu": "^4.1.1",
|
"electron-context-menu": "^4.1.1",
|
||||||
"electron-store": "^11.0.2",
|
"electron-store": "^11.0.2",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { sql } from '@codemirror/lang-sql';
|
|||||||
import { xml } from '@codemirror/lang-xml';
|
import { xml } from '@codemirror/lang-xml';
|
||||||
import { yaml as yamlLanguage } from '@codemirror/lang-yaml';
|
import { yaml as yamlLanguage } from '@codemirror/lang-yaml';
|
||||||
import { rust } from '@codemirror/lang-rust';
|
import { rust } from '@codemirror/lang-rust';
|
||||||
|
import { elixir } from 'codemirror-lang-elixir';
|
||||||
|
|
||||||
import { Language, LanguageDescription, StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';
|
import { Language, LanguageDescription, StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';
|
||||||
import { tags as t } from '@lezer/highlight';
|
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 { dockerFile } from '@codemirror/legacy-modes/mode/dockerfile';
|
||||||
import { ruby } from '@codemirror/legacy-modes/mode/ruby';
|
import { ruby } from '@codemirror/legacy-modes/mode/ruby';
|
||||||
import { properties } from '@codemirror/legacy-modes/mode/properties';
|
import { properties } from '@codemirror/legacy-modes/mode/properties';
|
||||||
|
import { erlang } from '@codemirror/legacy-modes/mode/erlang';
|
||||||
|
|
||||||
const shellLanguage = StreamLanguage.define(shell);
|
const shellLanguage = StreamLanguage.define(shell);
|
||||||
const tomlLanguage = StreamLanguage.define(toml);
|
const tomlLanguage = StreamLanguage.define(toml);
|
||||||
@@ -27,6 +29,9 @@ const diffLanguage = StreamLanguage.define(diff);
|
|||||||
const dockerfileLanguage = StreamLanguage.define(dockerFile);
|
const dockerfileLanguage = StreamLanguage.define(dockerFile);
|
||||||
const rubyLanguage = StreamLanguage.define(ruby);
|
const rubyLanguage = StreamLanguage.define(ruby);
|
||||||
const propertiesLanguage = StreamLanguage.define(properties);
|
const propertiesLanguage = StreamLanguage.define(properties);
|
||||||
|
const elixirSupport = elixir();
|
||||||
|
const elixirLanguage = elixirSupport.language;
|
||||||
|
const erlangLanguage = StreamLanguage.define(erlang);
|
||||||
|
|
||||||
function codeBlockLanguageResolver(info: string): Language | LanguageDescription | null {
|
function codeBlockLanguageResolver(info: string): Language | LanguageDescription | null {
|
||||||
const normalized = info.trim().toLowerCase();
|
const normalized = info.trim().toLowerCase();
|
||||||
@@ -76,6 +81,18 @@ function codeBlockLanguageResolver(info: string): Language | LanguageDescription
|
|||||||
case 'rs':
|
case 'rs':
|
||||||
case 'rust':
|
case 'rust':
|
||||||
return rust().language;
|
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:
|
default:
|
||||||
return LanguageDescription.matchLanguageName(languages, normalized, true);
|
return LanguageDescription.matchLanguageName(languages, normalized, true);
|
||||||
}
|
}
|
||||||
@@ -201,6 +218,18 @@ export function languageByExtension(filePath: string): Extension | null {
|
|||||||
case 'gemspec':
|
case 'gemspec':
|
||||||
return rubyLanguage;
|
return rubyLanguage;
|
||||||
|
|
||||||
|
case 'ex':
|
||||||
|
case 'exs':
|
||||||
|
return elixirSupport;
|
||||||
|
case 'erl':
|
||||||
|
case 'hrl':
|
||||||
|
return erlangLanguage;
|
||||||
|
|
||||||
|
case 'eex':
|
||||||
|
case 'leex':
|
||||||
|
case 'heex':
|
||||||
|
return html();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -473,9 +473,9 @@ export function getLanguageFromExtension(filePath: string): string | null {
|
|||||||
// Elixir/Erlang
|
// Elixir/Erlang
|
||||||
'ex': 'elixir',
|
'ex': 'elixir',
|
||||||
'exs': 'elixir',
|
'exs': 'elixir',
|
||||||
'eex': 'elixir',
|
'eex': 'html',
|
||||||
'heex': 'elixir',
|
'heex': 'html',
|
||||||
'leex': 'elixir',
|
'leex': 'html',
|
||||||
'erl': 'erlang',
|
'erl': 'erlang',
|
||||||
'hrl': 'erlang',
|
'hrl': 'erlang',
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user