-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlanguages.js
More file actions
54 lines (54 loc) · 6.51 KB
/
Copy pathlanguages.js
File metadata and controls
54 lines (54 loc) · 6.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const profiles = {
javascript:{name:'JavaScript',extensions:['js','jsx','mjs','cjs'],line:['//'],block:[['/*','*/']],strings:['"',"'",'`'],regex:true},
typescript:{name:'TypeScript',extensions:['ts','tsx'],line:['//'],block:[['/*','*/']],strings:['"',"'",'`'],regex:true},
java:{name:'Java',extensions:['java'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
c:{name:'C',extensions:['c','h'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
cpp:{name:'C++',extensions:['cc','cpp','cxx','hpp','hh','hxx'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
csharp:{name:'C#',extensions:['cs'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
go:{name:'Go',extensions:['go'],line:['//'],block:[['/*','*/']],strings:['"',"'",'`']},
rust:{name:'Rust',extensions:['rs'],line:['//'],block:[['/*','*/']],strings:['"',"'",'`']},
swift:{name:'Swift',extensions:['swift'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
kotlin:{name:'Kotlin',extensions:['kt','kts'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
scala:{name:'Scala',extensions:['scala','sc'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
dart:{name:'Dart',extensions:['dart'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
groovy:{name:'Groovy',extensions:['groovy','gvy'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
php:{name:'PHP',extensions:['php','phtml'],line:['//','#'],block:[['/*','*/']],strings:['"',"'"],regex:true},
css:{name:'CSS',extensions:['css','scss','less'],line:[],block:[['/*','*/']],strings:['"',"'"]},
html:{name:'HTML',extensions:['html','htm','xhtml'],line:[],block:[['<!--','-->']],strings:['"',"'"]},
xml:{name:'XML',extensions:['xml','xsd','xsl','svg'],line:[],block:[['<!--','-->']],strings:['"',"'"]},
python:{name:'Python',extensions:['py','pyw'],line:['#'],block:[],strings:['"',"'"],triple:true},
ruby:{name:'Ruby',extensions:['rb','rake','gemspec'],line:['#'],block:[['=begin','=end']],strings:['"',"'"]},
perl:{name:'Perl',extensions:['pl','pm'],line:['#'],block:[],strings:['"',"'"],regex:true},
r:{name:'R',extensions:['r','rmd'],line:['#'],block:[],strings:['"',"'"]},
shell:{name:'Shell',extensions:['sh','bash','zsh','fish','ksh'],line:['#'],block:[],strings:['"',"'"]},
powershell:{name:'PowerShell',extensions:['ps1','psm1','psd1'],line:['#'],block:[['<#','#>']],strings:['"',"'"]},
yaml:{name:'YAML',extensions:['yml','yaml'],line:['#'],block:[],strings:['"',"'"]},
dockerfile:{name:'Dockerfile',extensions:['dockerfile'],line:['#'],block:[],strings:['"',"'"]},
sql:{name:'SQL',extensions:['sql','pls','pkb','pks'],line:['--'],block:[['/*','*/']],strings:['"',"'"]},
lua:{name:'Lua',extensions:['lua'],line:['--'],block:[['--[[',']]']],strings:['"',"'"],triple:true},
haskell:{name:'Haskell',extensions:['hs','lhs'],line:['--'],block:[['{-','-}']],strings:['"',"'"]},
julia:{name:'Julia',extensions:['jl'],line:['#'],block:[['#=','=#']],strings:['"',"'"],triple:true},
nim:{name:'Nim',extensions:['nim'],line:['#'],block:[['#[',']#']],strings:['"',"'"]},
matlab:{name:'MATLAB',extensions:['m'],line:['%'],block:[['%{','%}']],strings:['"',"'"]},
fortran:{name:'Fortran',extensions:['f','f90','f95','f03','f08'],line:['!'],block:[],strings:['"',"'"]},
lisp:{name:'Lisp/Scheme',extensions:['lisp','lsp','cl','clj','cljs','scm'],line:[';'],block:[],strings:['"']},
erlang:{name:'Erlang',extensions:['erl','hrl'],line:['%'],block:[],strings:['"',"'"]},
elixir:{name:'Elixir',extensions:['ex','exs'],line:['#'],block:[],strings:['"',"'"]},
prolog:{name:'Prolog',extensions:['pro','plg'],line:['%'],block:[['/*','*/']],strings:['"',"'"]},
pascal:{name:'Pascal',extensions:['pas','pp','inc'],line:['//'],block:[['{','}'],['(*','*)']],strings:['"',"'"]},
d:{name:'D',extensions:['d'],line:['//'],block:[['/*','*/'],['/+','+/']],strings:['"',"'"]},
solidity:{name:'Solidity',extensions:['sol'],line:['//'],block:[['/*','*/']],strings:['"',"'"]},
hcl:{name:'HCL/Terraform',extensions:['tf','tfvars','hcl'],line:['#','//'],block:[['/*','*/']],strings:['"']},
json:{name:'JSONC',extensions:['jsonc'],line:['//'],block:[['/*','*/']],strings:['"']},
vb:{name:'Visual Basic',extensions:['vb','vbs','bas'],line:["'"],block:[],strings:['"'],keywordLine:['REM']},
batch:{name:'Batch',extensions:['bat','cmd'],line:['::'],block:[],strings:['"'],keywordLine:['REM']},
assembly:{name:'Assembly',extensions:['asm','s'],line:[';','#'],block:[],strings:['"',"'"]},
cobol:{name:'COBOL',extensions:['cob','cbl'],line:['*>'],block:[],strings:['"',"'"]},
generic:{name:'Generic',extensions:[],line:['//','#','--',';'],block:[['/*','*/'],['<!--','-->']],strings:['"',"'"]}
};
const aliases={js:'javascript',jsx:'javascript',mjs:'javascript',cjs:'javascript',ts:'typescript',tsx:'typescript',html:'html',htm:'html',xml:'xml',py:'python',rb:'ruby',sh:'shell',bash:'shell',zsh:'shell',yml:'yaml',yaml:'yaml',ps1:'powershell',sql:'sql',cpp:'cpp',cxx:'cpp',cc:'cpp',hpp:'cpp',cs:'csharp',rs:'rust',kt:'kotlin',kts:'kotlin',go:'go',swift:'swift',php:'php',scss:'css',less:'css',m:'matlab',jl:'julia',nim:'nim'};
export function getProfiles(){return Object.entries(profiles).map(([id,p])=>({id,name:p.name}));}
export function resolveLanguage(language){if(!language)return profiles.generic;const key=aliases[language.toLowerCase()]||language.toLowerCase();return profiles[key]||profiles.generic;}
export function detectLanguageByFilename(filename=''){const normalized=filename.toLowerCase().replaceAll('\\','/');const basename=normalized.split('/').pop();if(basename==='dockerfile'||basename.startsWith('dockerfile.'))return'dockerfile';if(basename==='makefile')return'shell';const extension=basename.includes('.')?basename.split('.').pop():'';if(aliases[extension])return aliases[extension];const direct=Object.entries(profiles).find(([,p])=>p.extensions.includes(extension));return direct?.[0]||'generic';}
export function detectLanguageByContent(code){const s=code.slice(0,12000);if(/^\s*(<\?xml|<!DOCTYPE|<html\b)/i.test(s))return'html';if(/^\s*(package\s+[\w.]+\s*;|public\s+(?:final\s+)?class\s+)/m.test(s))return'java';if(/^\s*#include\s*[<"]/.test(s))return'cpp';if(/\b(import\s+[A-Za-z_][\w.]*(?:\s+as\s+\w+)?|def\s+\w+\s*\(|from\s+\w+\s+import\s+)/.test(s))return'python';if(/\b(interface|type|enum|namespace)\s+\w+|:\s*(string|number|boolean|unknown|never)\b/.test(s)&&/\b(const|let|function|class)\b/.test(s))return'typescript';if(/\b(const|let|var|function)\b|=>|console\.log\s*\(/.test(s))return'javascript';if(/\b(SELECT|INSERT|UPDATE|DELETE|CREATE\s+TABLE|FROM)\b/i.test(s)&&/\b(FROM|WHERE|VALUES)\b/i.test(s))return'sql';return'generic';}
export {profiles};