mirror of
https://github.com/go-gitea/gitea.git
synced 2025-04-12 10:48:46 +03:00
Fix file icon mapping (#33855)
Use the file extension mapping from VSCode's extensions. Otherwise js/ts/vba/... files won't get correct icons.
This commit is contained in:
@ -21,6 +21,7 @@ type materialIconRulesData struct {
|
|||||||
FileNames map[string]string `json:"fileNames"`
|
FileNames map[string]string `json:"fileNames"`
|
||||||
FolderNames map[string]string `json:"folderNames"`
|
FolderNames map[string]string `json:"folderNames"`
|
||||||
FileExtensions map[string]string `json:"fileExtensions"`
|
FileExtensions map[string]string `json:"fileExtensions"`
|
||||||
|
LanguageIDs map[string]string `json:"languageIds"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MaterialIconProvider struct {
|
type MaterialIconProvider struct {
|
||||||
@ -107,28 +108,43 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
|
|||||||
return svg.RenderHTML("octicon-file")
|
return svg.RenderHTML("octicon-file")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MaterialIconProvider) findIconNameWithLangID(s string) string {
|
||||||
|
if _, ok := m.svgs[s]; ok {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
if s, ok := m.rules.LanguageIDs[s]; ok {
|
||||||
|
if _, ok = m.svgs[s]; ok {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func (m *MaterialIconProvider) FindIconName(name string, isDir bool) string {
|
func (m *MaterialIconProvider) FindIconName(name string, isDir bool) string {
|
||||||
iconsData := m.rules
|
|
||||||
fileNameLower := strings.ToLower(path.Base(name))
|
fileNameLower := strings.ToLower(path.Base(name))
|
||||||
if isDir {
|
if isDir {
|
||||||
if s, ok := iconsData.FolderNames[fileNameLower]; ok {
|
if s, ok := m.rules.FolderNames[fileNameLower]; ok {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
return "folder"
|
return "folder"
|
||||||
}
|
}
|
||||||
|
|
||||||
if s, ok := iconsData.FileNames[fileNameLower]; ok {
|
if s, ok := m.rules.FileNames[fileNameLower]; ok {
|
||||||
|
if s = m.findIconNameWithLangID(s); s != "" {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for i := len(fileNameLower) - 1; i >= 0; i-- {
|
for i := len(fileNameLower) - 1; i >= 0; i-- {
|
||||||
if fileNameLower[i] == '.' {
|
if fileNameLower[i] == '.' {
|
||||||
ext := fileNameLower[i+1:]
|
ext := fileNameLower[i+1:]
|
||||||
if s, ok := iconsData.FileExtensions[ext]; ok {
|
if s, ok := m.rules.FileExtensions[ext]; ok {
|
||||||
|
if s = m.findIconNameWithLangID(s); s != "" {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return "file"
|
return "file"
|
||||||
}
|
}
|
||||||
|
@ -21,4 +21,6 @@ func TestFindIconName(t *testing.T) {
|
|||||||
p := fileicon.DefaultMaterialIconProvider()
|
p := fileicon.DefaultMaterialIconProvider()
|
||||||
assert.Equal(t, "php", p.FindIconName("foo.php", false))
|
assert.Equal(t, "php", p.FindIconName("foo.php", false))
|
||||||
assert.Equal(t, "php", p.FindIconName("foo.PHP", false))
|
assert.Equal(t, "php", p.FindIconName("foo.PHP", false))
|
||||||
|
assert.Equal(t, "javascript", p.FindIconName("foo.js", false))
|
||||||
|
assert.Equal(t, "visualstudio", p.FindIconName("foo.vba", false))
|
||||||
}
|
}
|
||||||
|
@ -7038,107 +7038,201 @@
|
|||||||
"gnu": "gnuplot",
|
"gnu": "gnuplot",
|
||||||
"yaml-tmlanguage": "yaml",
|
"yaml-tmlanguage": "yaml",
|
||||||
"tmlanguage": "xml",
|
"tmlanguage": "xml",
|
||||||
"git": "git",
|
"cljx": "clojure",
|
||||||
"git-commit": "git",
|
|
||||||
"git-rebase": "git",
|
|
||||||
"ignore": "git",
|
|
||||||
"github-actions-workflow": "github-actions-workflow",
|
|
||||||
"yaml": "yaml",
|
|
||||||
"spring-boot-properties-yaml": "yaml",
|
|
||||||
"ansible": "yaml",
|
|
||||||
"ansible-jinja": "yaml",
|
|
||||||
"matlab": "matlab",
|
|
||||||
"makefile": "settings",
|
|
||||||
"spring-boot-properties": "settings",
|
|
||||||
"diff": "diff",
|
|
||||||
"razor": "razor",
|
|
||||||
"aspnetcorerazor": "razor",
|
|
||||||
"python": "python",
|
|
||||||
"javascript": "javascript",
|
|
||||||
"typescript": "typescript",
|
|
||||||
"handlebars": "handlebars",
|
|
||||||
"perl": "perl",
|
|
||||||
"perl6": "perl",
|
|
||||||
"haxe": "haxe",
|
|
||||||
"hxml": "haxe",
|
|
||||||
"puppet": "puppet",
|
|
||||||
"elixir": "elixir",
|
|
||||||
"livescript": "livescript",
|
|
||||||
"erlang": "erlang",
|
|
||||||
"julia": "julia",
|
|
||||||
"purescript": "purescript",
|
|
||||||
"stylus": "stylus",
|
|
||||||
"robotframework": "robot",
|
|
||||||
"testoutput": "visualstudio",
|
|
||||||
"solidity": "solidity",
|
|
||||||
"autoit": "autoit",
|
|
||||||
"terraform": "terraform",
|
|
||||||
"cucumber": "cucumber",
|
|
||||||
"postcss": "postcss",
|
|
||||||
"lang-cfml": "coldfusion",
|
|
||||||
"haskell": "haskell",
|
|
||||||
"ruby": "ruby",
|
|
||||||
"php": "php",
|
|
||||||
"hack": "hack",
|
|
||||||
"javascriptreact": "react",
|
|
||||||
"processing": "processing",
|
|
||||||
"django-html": "django",
|
|
||||||
"django-txt": "django",
|
|
||||||
"html": "html",
|
|
||||||
"gdscript": "godot",
|
|
||||||
"gdresource": "godot-assets",
|
|
||||||
"viml": "vim",
|
|
||||||
"prolog": "prolog",
|
|
||||||
"pawn": "pawn",
|
|
||||||
"reason": "reason",
|
|
||||||
"reason_lisp": "reason",
|
|
||||||
"doctex": "tex",
|
|
||||||
"latex": "tex",
|
|
||||||
"latex-expl3": "tex",
|
|
||||||
"apex": "salesforce",
|
|
||||||
"dockercompose": "docker",
|
|
||||||
"shellscript": "console",
|
|
||||||
"objective-c": "objective-c",
|
|
||||||
"objective-cpp": "objective-cpp",
|
|
||||||
"coffeescript": "coffee",
|
|
||||||
"fsharp": "fsharp",
|
|
||||||
"editorconfig": "editorconfig",
|
|
||||||
"clojure": "clojure",
|
"clojure": "clojure",
|
||||||
"pip-requirements": "python-misc",
|
"edn": "clojure",
|
||||||
"vue-postcss": "vue",
|
"cppm": "cpp",
|
||||||
"vue-html": "vue",
|
"ccm": "cpp",
|
||||||
"bibtex": "lib",
|
"cxxm": "cpp",
|
||||||
"bibtex-style": "lib",
|
"c++m": "cpp",
|
||||||
"jupyter": "jupyter",
|
"ipp": "cpp",
|
||||||
"plaintext": "document",
|
"ixx": "cpp",
|
||||||
"powershell": "powershell",
|
"tpp": "cpp",
|
||||||
"rsweave": "r",
|
"txx": "cpp",
|
||||||
"rust": "rust",
|
"hpp.in": "cpp",
|
||||||
"ssh_config": "lock",
|
"h.in": "cpp",
|
||||||
"typescriptreact": "react_ts",
|
"diff": "diff",
|
||||||
"search-result": "search",
|
"rej": "diff",
|
||||||
"rescript": "rescript",
|
"fsscript": "fsharp",
|
||||||
"twee3": "twine",
|
"gitignore_global": "ignore",
|
||||||
"twee3-harlowe-3": "twine",
|
"gitignore": "ignore",
|
||||||
"twee3-chapbook-1": "twine",
|
"git-blame-ignore-revs": "ignore",
|
||||||
"twee3-sugarcube-2": "twine",
|
"gvy": "groovy",
|
||||||
"grain": "grain",
|
"nf": "groovy",
|
||||||
"lolcode": "lolcode",
|
"handlebars": "handlebars",
|
||||||
"idris": "idris",
|
"hjs": "handlebars",
|
||||||
"text-gemini": "gemini",
|
"hlsli": "hlsl",
|
||||||
"wolfram": "wolframlanguage",
|
"fx": "hlsl",
|
||||||
"shaderlab": "shader",
|
"fxh": "hlsl",
|
||||||
"cadence": "cadence",
|
"vsh": "hlsl",
|
||||||
"stylable": "stylable",
|
"psh": "hlsl",
|
||||||
"capnb": "cds",
|
"cginc": "hlsl",
|
||||||
"cds-markdown-injection": "cds",
|
"compute": "hlsl",
|
||||||
"concourse-pipeline-yaml": "concourse",
|
"html": "html",
|
||||||
"concourse-task-yaml": "concourse",
|
"shtml": "html",
|
||||||
"systemd-conf": "systemd",
|
"xht": "html",
|
||||||
"systemd-unit-file": "systemd",
|
"aspx": "html",
|
||||||
"hosts": "hosts",
|
"jshtm": "html",
|
||||||
"ahk2": "ahk2",
|
"volt": "html",
|
||||||
"gnuplot": "gnuplot"
|
"rhtml": "html",
|
||||||
|
"directory": "properties",
|
||||||
|
"gitattributes": "properties",
|
||||||
|
"gitconfig": "properties",
|
||||||
|
"gitmodules": "properties",
|
||||||
|
"editorconfig": "properties",
|
||||||
|
"repo": "properties",
|
||||||
|
"jav": "java",
|
||||||
|
"js": "javascript",
|
||||||
|
"es6": "javascript",
|
||||||
|
"cjs": "javascript",
|
||||||
|
"pac": "javascript",
|
||||||
|
"bowerrc": "json",
|
||||||
|
"jscsrc": "json",
|
||||||
|
"webmanifest": "json",
|
||||||
|
"ts.map": "json",
|
||||||
|
"har": "json",
|
||||||
|
"jslintrc": "json",
|
||||||
|
"jsonld": "json",
|
||||||
|
"geojson": "json",
|
||||||
|
"vuerc": "json",
|
||||||
|
"eslintrc": "jsonc",
|
||||||
|
"eslintrc.json": "jsonc",
|
||||||
|
"jsfmtrc": "jsonc",
|
||||||
|
"jshintrc": "jsonc",
|
||||||
|
"hintrc": "jsonc",
|
||||||
|
"babelrc": "jsonc",
|
||||||
|
"jmd": "juliamarkdown",
|
||||||
|
"cls": "tex",
|
||||||
|
"bbx": "tex",
|
||||||
|
"cbx": "tex",
|
||||||
|
"ctx": "latex",
|
||||||
|
"mak": "makefile",
|
||||||
|
"mkd": "markdown",
|
||||||
|
"mdwn": "markdown",
|
||||||
|
"mdown": "markdown",
|
||||||
|
"markdn": "markdown",
|
||||||
|
"mdtxt": "markdown",
|
||||||
|
"mdtext": "markdown",
|
||||||
|
"workbook": "markdown",
|
||||||
|
"npmignore": "ignore",
|
||||||
|
"npmrc": "properties",
|
||||||
|
"m": "objective-c",
|
||||||
|
"mm": "objective-cpp",
|
||||||
|
"pod": "perl",
|
||||||
|
"t": "perl",
|
||||||
|
"psgi": "perl",
|
||||||
|
"rakumod": "raku",
|
||||||
|
"rakutest": "raku",
|
||||||
|
"rakudoc": "raku",
|
||||||
|
"nqp": "raku",
|
||||||
|
"p6": "raku",
|
||||||
|
"pl6": "raku",
|
||||||
|
"pm6": "raku",
|
||||||
|
"php": "php",
|
||||||
|
"php4": "php",
|
||||||
|
"php5": "php",
|
||||||
|
"phtml": "php",
|
||||||
|
"ctp": "php",
|
||||||
|
"psrc": "powershell",
|
||||||
|
"rpy": "python",
|
||||||
|
"pyw": "python",
|
||||||
|
"cpy": "python",
|
||||||
|
"gyp": "python",
|
||||||
|
"gypi": "python",
|
||||||
|
"pyi": "python",
|
||||||
|
"ipy": "python",
|
||||||
|
"pyt": "python",
|
||||||
|
"rhistory": "r",
|
||||||
|
"rprofile": "r",
|
||||||
|
"rt": "r",
|
||||||
|
"razor": "razor",
|
||||||
|
"rbx": "ruby",
|
||||||
|
"rjs": "ruby",
|
||||||
|
"gemspec": "ruby",
|
||||||
|
"rake": "ruby",
|
||||||
|
"ru": "ruby",
|
||||||
|
"podspec": "ruby",
|
||||||
|
"rbi": "ruby",
|
||||||
|
"bashrc": "shellscript",
|
||||||
|
"bash_aliases": "shellscript",
|
||||||
|
"bash_profile": "shellscript",
|
||||||
|
"bash_login": "shellscript",
|
||||||
|
"ebuild": "shellscript",
|
||||||
|
"eclass": "shellscript",
|
||||||
|
"profile": "shellscript",
|
||||||
|
"bash_logout": "shellscript",
|
||||||
|
"xprofile": "shellscript",
|
||||||
|
"xsession": "shellscript",
|
||||||
|
"xsessionrc": "shellscript",
|
||||||
|
"zshrc": "shellscript",
|
||||||
|
"zprofile": "shellscript",
|
||||||
|
"zlogin": "shellscript",
|
||||||
|
"zlogout": "shellscript",
|
||||||
|
"zshenv": "shellscript",
|
||||||
|
"zsh-theme": "shellscript",
|
||||||
|
"cshrc": "shellscript",
|
||||||
|
"tcshrc": "shellscript",
|
||||||
|
"yashrc": "shellscript",
|
||||||
|
"yash_profile": "shellscript",
|
||||||
|
"dsql": "sql",
|
||||||
|
"ts": "typescript",
|
||||||
|
"cts": "typescript",
|
||||||
|
"mts": "typescript",
|
||||||
|
"brs": "vb",
|
||||||
|
"bas": "vb",
|
||||||
|
"vba": "vb",
|
||||||
|
"ascx": "xml",
|
||||||
|
"atom": "xml",
|
||||||
|
"axml": "xml",
|
||||||
|
"axaml": "xml",
|
||||||
|
"bpmn": "xml",
|
||||||
|
"csl": "xml",
|
||||||
|
"csproj.user": "xml",
|
||||||
|
"dita": "xml",
|
||||||
|
"ditamap": "xml",
|
||||||
|
"ent": "xml",
|
||||||
|
"dtml": "xml",
|
||||||
|
"fxml": "xml",
|
||||||
|
"isml": "xml",
|
||||||
|
"jmx": "xml",
|
||||||
|
"launch": "xml",
|
||||||
|
"menu": "xml",
|
||||||
|
"nuspec": "xml",
|
||||||
|
"opml": "xml",
|
||||||
|
"owl": "xml",
|
||||||
|
"proj": "xml",
|
||||||
|
"pt": "xml",
|
||||||
|
"publishsettings": "xml",
|
||||||
|
"pubxml": "xml",
|
||||||
|
"pubxml.user": "xml",
|
||||||
|
"rdf": "xml",
|
||||||
|
"rng": "xml",
|
||||||
|
"rss": "xml",
|
||||||
|
"shproj": "xml",
|
||||||
|
"storyboard": "xml",
|
||||||
|
"targets": "xml",
|
||||||
|
"tld": "xml",
|
||||||
|
"tmx": "xml",
|
||||||
|
"vbproj": "xml",
|
||||||
|
"vbproj.user": "xml",
|
||||||
|
"wsdl": "xml",
|
||||||
|
"wxi": "xml",
|
||||||
|
"wxl": "xml",
|
||||||
|
"wxs": "xml",
|
||||||
|
"xbl": "xml",
|
||||||
|
"xib": "xml",
|
||||||
|
"xliff": "xml",
|
||||||
|
"xpdl": "xml",
|
||||||
|
"xul": "xml",
|
||||||
|
"xoml": "xml",
|
||||||
|
"yaml": "yaml",
|
||||||
|
"yml": "yaml",
|
||||||
|
"eyaml": "yaml",
|
||||||
|
"eyml": "yaml",
|
||||||
|
"cff": "yaml",
|
||||||
|
"yaml-tmpreferences": "yaml",
|
||||||
|
"yaml-tmtheme": "yaml",
|
||||||
|
"winget": "yaml"
|
||||||
},
|
},
|
||||||
"fileNames": {
|
"fileNames": {
|
||||||
".pug-lintrc": "pug",
|
".pug-lintrc": "pug",
|
||||||
@ -9015,7 +9109,11 @@
|
|||||||
"caddyfile": "caddy",
|
"caddyfile": "caddy",
|
||||||
"pklproject": "pkl",
|
"pklproject": "pkl",
|
||||||
"pklproject.deps.json": "pkl",
|
"pklproject.deps.json": "pkl",
|
||||||
".github/funding.yml": "github-sponsors"
|
".github/funding.yml": "github-sponsors",
|
||||||
|
"language-configuration.json": "jsonc",
|
||||||
|
"icon-theme.json": "jsonc",
|
||||||
|
"color-theme.json": "jsonc",
|
||||||
|
"*.log.?": "log"
|
||||||
},
|
},
|
||||||
"languageIds": {
|
"languageIds": {
|
||||||
"git": "git",
|
"git": "git",
|
||||||
|
570
tools/generate-svg-vscode-extensions.json
Normal file
570
tools/generate-svg-vscode-extensions.json
Normal file
@ -0,0 +1,570 @@
|
|||||||
|
{
|
||||||
|
"pkg:bat": {
|
||||||
|
"bat": [
|
||||||
|
".bat",
|
||||||
|
".cmd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:clojure": {
|
||||||
|
"clojure": [
|
||||||
|
".clj",
|
||||||
|
".cljs",
|
||||||
|
".cljc",
|
||||||
|
".cljx",
|
||||||
|
".clojure",
|
||||||
|
".edn"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:coffeescript": {
|
||||||
|
"coffeescript": [
|
||||||
|
".coffee",
|
||||||
|
".cson",
|
||||||
|
".iced"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:configuration-editing": {
|
||||||
|
"jsonc": [
|
||||||
|
".code-workspace",
|
||||||
|
"language-configuration.json",
|
||||||
|
"icon-theme.json",
|
||||||
|
"color-theme.json"
|
||||||
|
],
|
||||||
|
"json": [
|
||||||
|
".code-profile"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:cpp": {
|
||||||
|
"c": [
|
||||||
|
".c",
|
||||||
|
".i"
|
||||||
|
],
|
||||||
|
"cpp": [
|
||||||
|
".cpp",
|
||||||
|
".cppm",
|
||||||
|
".cc",
|
||||||
|
".ccm",
|
||||||
|
".cxx",
|
||||||
|
".cxxm",
|
||||||
|
".c++",
|
||||||
|
".c++m",
|
||||||
|
".hpp",
|
||||||
|
".hh",
|
||||||
|
".hxx",
|
||||||
|
".h++",
|
||||||
|
".h",
|
||||||
|
".ii",
|
||||||
|
".ino",
|
||||||
|
".inl",
|
||||||
|
".ipp",
|
||||||
|
".ixx",
|
||||||
|
".tpp",
|
||||||
|
".txx",
|
||||||
|
".hpp.in",
|
||||||
|
".h.in"
|
||||||
|
],
|
||||||
|
"cuda-cpp": [
|
||||||
|
".cu",
|
||||||
|
".cuh"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:csharp": {
|
||||||
|
"csharp": [
|
||||||
|
".cs",
|
||||||
|
".csx",
|
||||||
|
".cake"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:css": {
|
||||||
|
"css": [
|
||||||
|
".css"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:dart": {
|
||||||
|
"dart": [
|
||||||
|
".dart"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:diff": {
|
||||||
|
"diff": [
|
||||||
|
".diff",
|
||||||
|
".patch",
|
||||||
|
".rej"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:docker": {
|
||||||
|
"dockerfile": [
|
||||||
|
".dockerfile",
|
||||||
|
".containerfile"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:fsharp": {
|
||||||
|
"fsharp": [
|
||||||
|
".fs",
|
||||||
|
".fsi",
|
||||||
|
".fsx",
|
||||||
|
".fsscript"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:git-base": {
|
||||||
|
"ignore": [
|
||||||
|
".gitignore_global",
|
||||||
|
".gitignore",
|
||||||
|
".git-blame-ignore-revs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:go": {
|
||||||
|
"go": [
|
||||||
|
".go"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:groovy": {
|
||||||
|
"groovy": [
|
||||||
|
".groovy",
|
||||||
|
".gvy",
|
||||||
|
".gradle",
|
||||||
|
".jenkinsfile",
|
||||||
|
".nf"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:handlebars": {
|
||||||
|
"handlebars": [
|
||||||
|
".handlebars",
|
||||||
|
".hbs",
|
||||||
|
".hjs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:hlsl": {
|
||||||
|
"hlsl": [
|
||||||
|
".hlsl",
|
||||||
|
".hlsli",
|
||||||
|
".fx",
|
||||||
|
".fxh",
|
||||||
|
".vsh",
|
||||||
|
".psh",
|
||||||
|
".cginc",
|
||||||
|
".compute"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:html": {
|
||||||
|
"html": [
|
||||||
|
".html",
|
||||||
|
".htm",
|
||||||
|
".shtml",
|
||||||
|
".xhtml",
|
||||||
|
".xht",
|
||||||
|
".mdoc",
|
||||||
|
".jsp",
|
||||||
|
".asp",
|
||||||
|
".aspx",
|
||||||
|
".jshtm",
|
||||||
|
".volt",
|
||||||
|
".ejs",
|
||||||
|
".rhtml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:ini": {
|
||||||
|
"ini": [
|
||||||
|
".ini"
|
||||||
|
],
|
||||||
|
"properties": [
|
||||||
|
".conf",
|
||||||
|
".properties",
|
||||||
|
".cfg",
|
||||||
|
".directory",
|
||||||
|
".gitattributes",
|
||||||
|
".gitconfig",
|
||||||
|
".gitmodules",
|
||||||
|
".editorconfig",
|
||||||
|
".repo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:java": {
|
||||||
|
"java": [
|
||||||
|
".java",
|
||||||
|
".jav"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:javascript": {
|
||||||
|
"javascriptreact": [
|
||||||
|
".jsx"
|
||||||
|
],
|
||||||
|
"javascript": [
|
||||||
|
".js",
|
||||||
|
".es6",
|
||||||
|
".mjs",
|
||||||
|
".cjs",
|
||||||
|
".pac"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:json": {
|
||||||
|
"json": [
|
||||||
|
".json",
|
||||||
|
".bowerrc",
|
||||||
|
".jscsrc",
|
||||||
|
".webmanifest",
|
||||||
|
".js.map",
|
||||||
|
".css.map",
|
||||||
|
".ts.map",
|
||||||
|
".har",
|
||||||
|
".jslintrc",
|
||||||
|
".jsonld",
|
||||||
|
".geojson",
|
||||||
|
".ipynb",
|
||||||
|
".vuerc"
|
||||||
|
],
|
||||||
|
"jsonc": [
|
||||||
|
".jsonc",
|
||||||
|
".eslintrc",
|
||||||
|
".eslintrc.json",
|
||||||
|
".jsfmtrc",
|
||||||
|
".jshintrc",
|
||||||
|
".swcrc",
|
||||||
|
".hintrc",
|
||||||
|
".babelrc"
|
||||||
|
],
|
||||||
|
"jsonl": [
|
||||||
|
".jsonl",
|
||||||
|
".ndjson"
|
||||||
|
],
|
||||||
|
"snippets": [
|
||||||
|
".code-snippets"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:julia": {
|
||||||
|
"julia": [
|
||||||
|
".jl"
|
||||||
|
],
|
||||||
|
"juliamarkdown": [
|
||||||
|
".jmd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:latex": {
|
||||||
|
"tex": [
|
||||||
|
".sty",
|
||||||
|
".cls",
|
||||||
|
".bbx",
|
||||||
|
".cbx"
|
||||||
|
],
|
||||||
|
"latex": [
|
||||||
|
".tex",
|
||||||
|
".ltx",
|
||||||
|
".ctx"
|
||||||
|
],
|
||||||
|
"bibtex": [
|
||||||
|
".bib"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:less": {
|
||||||
|
"less": [
|
||||||
|
".less"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:log": {
|
||||||
|
"log": [
|
||||||
|
".log",
|
||||||
|
"*.log.?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:lua": {
|
||||||
|
"lua": [
|
||||||
|
".lua"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:make": {
|
||||||
|
"makefile": [
|
||||||
|
".mak",
|
||||||
|
".mk"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:markdown-basics": {
|
||||||
|
"markdown": [
|
||||||
|
".md",
|
||||||
|
".mkd",
|
||||||
|
".mdwn",
|
||||||
|
".mdown",
|
||||||
|
".markdown",
|
||||||
|
".markdn",
|
||||||
|
".mdtxt",
|
||||||
|
".mdtext",
|
||||||
|
".workbook"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:ms-vscode.js-debug": {
|
||||||
|
"wat": [
|
||||||
|
".wat",
|
||||||
|
".wasm"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:npm": {
|
||||||
|
"ignore": [
|
||||||
|
".npmignore"
|
||||||
|
],
|
||||||
|
"properties": [
|
||||||
|
".npmrc"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:objective-c": {
|
||||||
|
"objective-c": [
|
||||||
|
".m"
|
||||||
|
],
|
||||||
|
"objective-cpp": [
|
||||||
|
".mm"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:perl": {
|
||||||
|
"perl": [
|
||||||
|
".pl",
|
||||||
|
".pm",
|
||||||
|
".pod",
|
||||||
|
".t",
|
||||||
|
".PL",
|
||||||
|
".psgi"
|
||||||
|
],
|
||||||
|
"raku": [
|
||||||
|
".raku",
|
||||||
|
".rakumod",
|
||||||
|
".rakutest",
|
||||||
|
".rakudoc",
|
||||||
|
".nqp",
|
||||||
|
".p6",
|
||||||
|
".pl6",
|
||||||
|
".pm6"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:php": {
|
||||||
|
"php": [
|
||||||
|
".php",
|
||||||
|
".php4",
|
||||||
|
".php5",
|
||||||
|
".phtml",
|
||||||
|
".ctp"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:powershell": {
|
||||||
|
"powershell": [
|
||||||
|
".ps1",
|
||||||
|
".psm1",
|
||||||
|
".psd1",
|
||||||
|
".pssc",
|
||||||
|
".psrc"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:pug": {
|
||||||
|
"jade": [
|
||||||
|
".pug",
|
||||||
|
".jade"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:python": {
|
||||||
|
"python": [
|
||||||
|
".py",
|
||||||
|
".rpy",
|
||||||
|
".pyw",
|
||||||
|
".cpy",
|
||||||
|
".gyp",
|
||||||
|
".gypi",
|
||||||
|
".pyi",
|
||||||
|
".ipy",
|
||||||
|
".pyt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:r": {
|
||||||
|
"r": [
|
||||||
|
".r",
|
||||||
|
".rhistory",
|
||||||
|
".rprofile",
|
||||||
|
".rt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:razor": {
|
||||||
|
"razor": [
|
||||||
|
".cshtml",
|
||||||
|
".razor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:restructuredtext": {
|
||||||
|
"restructuredtext": [
|
||||||
|
".rst"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:ruby": {
|
||||||
|
"ruby": [
|
||||||
|
".rb",
|
||||||
|
".rbx",
|
||||||
|
".rjs",
|
||||||
|
".gemspec",
|
||||||
|
".rake",
|
||||||
|
".ru",
|
||||||
|
".erb",
|
||||||
|
".podspec",
|
||||||
|
".rbi"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:rust": {
|
||||||
|
"rust": [
|
||||||
|
".rs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:scss": {
|
||||||
|
"scss": [
|
||||||
|
".scss"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:search-result": {
|
||||||
|
"search-result": [
|
||||||
|
".code-search"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:shaderlab": {
|
||||||
|
"shaderlab": [
|
||||||
|
".shader"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:shellscript": {
|
||||||
|
"shellscript": [
|
||||||
|
".sh",
|
||||||
|
".bash",
|
||||||
|
".bashrc",
|
||||||
|
".bash_aliases",
|
||||||
|
".bash_profile",
|
||||||
|
".bash_login",
|
||||||
|
".ebuild",
|
||||||
|
".eclass",
|
||||||
|
".profile",
|
||||||
|
".bash_logout",
|
||||||
|
".xprofile",
|
||||||
|
".xsession",
|
||||||
|
".xsessionrc",
|
||||||
|
".Xsession",
|
||||||
|
".zsh",
|
||||||
|
".zshrc",
|
||||||
|
".zprofile",
|
||||||
|
".zlogin",
|
||||||
|
".zlogout",
|
||||||
|
".zshenv",
|
||||||
|
".zsh-theme",
|
||||||
|
".fish",
|
||||||
|
".ksh",
|
||||||
|
".csh",
|
||||||
|
".cshrc",
|
||||||
|
".tcshrc",
|
||||||
|
".yashrc",
|
||||||
|
".yash_profile"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:sql": {
|
||||||
|
"sql": [
|
||||||
|
".sql",
|
||||||
|
".dsql"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:swift": {
|
||||||
|
"swift": [
|
||||||
|
".swift"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:typescript-basics": {
|
||||||
|
"typescript": [
|
||||||
|
".ts",
|
||||||
|
".cts",
|
||||||
|
".mts"
|
||||||
|
],
|
||||||
|
"typescriptreact": [
|
||||||
|
".tsx"
|
||||||
|
],
|
||||||
|
"json": [
|
||||||
|
".tsbuildinfo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:vb": {
|
||||||
|
"vb": [
|
||||||
|
".vb",
|
||||||
|
".brs",
|
||||||
|
".vbs",
|
||||||
|
".bas",
|
||||||
|
".vba"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:xml": {
|
||||||
|
"xml": [
|
||||||
|
".xml",
|
||||||
|
".xsd",
|
||||||
|
".ascx",
|
||||||
|
".atom",
|
||||||
|
".axml",
|
||||||
|
".axaml",
|
||||||
|
".bpmn",
|
||||||
|
".cpt",
|
||||||
|
".csl",
|
||||||
|
".csproj",
|
||||||
|
".csproj.user",
|
||||||
|
".dita",
|
||||||
|
".ditamap",
|
||||||
|
".dtd",
|
||||||
|
".ent",
|
||||||
|
".mod",
|
||||||
|
".dtml",
|
||||||
|
".fsproj",
|
||||||
|
".fxml",
|
||||||
|
".iml",
|
||||||
|
".isml",
|
||||||
|
".jmx",
|
||||||
|
".launch",
|
||||||
|
".menu",
|
||||||
|
".mxml",
|
||||||
|
".nuspec",
|
||||||
|
".opml",
|
||||||
|
".owl",
|
||||||
|
".proj",
|
||||||
|
".props",
|
||||||
|
".pt",
|
||||||
|
".publishsettings",
|
||||||
|
".pubxml",
|
||||||
|
".pubxml.user",
|
||||||
|
".rbxlx",
|
||||||
|
".rbxmx",
|
||||||
|
".rdf",
|
||||||
|
".rng",
|
||||||
|
".rss",
|
||||||
|
".shproj",
|
||||||
|
".storyboard",
|
||||||
|
".svg",
|
||||||
|
".targets",
|
||||||
|
".tld",
|
||||||
|
".tmx",
|
||||||
|
".vbproj",
|
||||||
|
".vbproj.user",
|
||||||
|
".vcxproj",
|
||||||
|
".vcxproj.filters",
|
||||||
|
".wsdl",
|
||||||
|
".wxi",
|
||||||
|
".wxl",
|
||||||
|
".wxs",
|
||||||
|
".xaml",
|
||||||
|
".xbl",
|
||||||
|
".xib",
|
||||||
|
".xlf",
|
||||||
|
".xliff",
|
||||||
|
".xpdl",
|
||||||
|
".xul",
|
||||||
|
".xoml"
|
||||||
|
],
|
||||||
|
"xsl": [
|
||||||
|
".xsl",
|
||||||
|
".xslt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pkg:yaml": {
|
||||||
|
"yaml": [
|
||||||
|
".yaml",
|
||||||
|
".yml",
|
||||||
|
".eyaml",
|
||||||
|
".eyml",
|
||||||
|
".cff",
|
||||||
|
".yaml-tmlanguage",
|
||||||
|
".yaml-tmpreferences",
|
||||||
|
".yaml-tmtheme",
|
||||||
|
".winget"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -63,17 +63,32 @@ async function processMaterialFileIcons() {
|
|||||||
}
|
}
|
||||||
fs.writeFileSync(fileURLToPath(new URL(`../options/fileicon/material-icon-svgs.json`, import.meta.url)), JSON.stringify(svgSymbols, null, 2));
|
fs.writeFileSync(fileURLToPath(new URL(`../options/fileicon/material-icon-svgs.json`, import.meta.url)), JSON.stringify(svgSymbols, null, 2));
|
||||||
|
|
||||||
|
const vscodeExtensionsJson = await readFile(fileURLToPath(new URL(`generate-svg-vscode-extensions.json`, import.meta.url)));
|
||||||
|
const vscodeExtensions = JSON.parse(vscodeExtensionsJson);
|
||||||
const iconRulesJson = await readFile(fileURLToPath(new URL(`../node_modules/material-icon-theme/dist/material-icons.json`, import.meta.url)));
|
const iconRulesJson = await readFile(fileURLToPath(new URL(`../node_modules/material-icon-theme/dist/material-icons.json`, import.meta.url)));
|
||||||
const iconRules = JSON.parse(iconRulesJson);
|
const iconRules = JSON.parse(iconRulesJson);
|
||||||
// The rules are from VSCode material-icon-theme, we need to adjust them to our needs
|
// The rules are from VSCode material-icon-theme, we need to adjust them to our needs
|
||||||
// 1. We only use lowercase filenames to match (it should be good enough for most cases and more efficient)
|
// 1. We only use lowercase filenames to match (it should be good enough for most cases and more efficient)
|
||||||
// 2. We do not have a "Language ID" system: https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers
|
// 2. We do not have a "Language ID" system:
|
||||||
// * So we just treat the "Language ID" as file extension, it is not always true, but it is good enough for most cases.
|
// * https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers
|
||||||
|
// * https://github.com/microsoft/vscode/tree/1.98.0/extensions
|
||||||
delete iconRules.iconDefinitions;
|
delete iconRules.iconDefinitions;
|
||||||
for (const [k, v] of Object.entries(iconRules.fileNames)) iconRules.fileNames[k.toLowerCase()] = v;
|
for (const [k, v] of Object.entries(iconRules.fileNames)) iconRules.fileNames[k.toLowerCase()] = v;
|
||||||
for (const [k, v] of Object.entries(iconRules.folderNames)) iconRules.folderNames[k.toLowerCase()] = v;
|
for (const [k, v] of Object.entries(iconRules.folderNames)) iconRules.folderNames[k.toLowerCase()] = v;
|
||||||
for (const [k, v] of Object.entries(iconRules.fileExtensions)) iconRules.fileExtensions[k.toLowerCase()] = v;
|
for (const [k, v] of Object.entries(iconRules.fileExtensions)) iconRules.fileExtensions[k.toLowerCase()] = v;
|
||||||
for (const [k, v] of Object.entries(iconRules.languageIds)) iconRules.fileExtensions[k.toLowerCase()] = v;
|
// Use VSCode's "Language ID" mapping from its extensions
|
||||||
|
for (const [_, langIdExtMap] of Object.entries(vscodeExtensions)) {
|
||||||
|
for (const [langId, names] of Object.entries(langIdExtMap)) {
|
||||||
|
for (const name of names) {
|
||||||
|
const nameLower = name.toLowerCase();
|
||||||
|
if (nameLower[0] === '.') {
|
||||||
|
iconRules.fileExtensions[nameLower.substring(1)] ??= langId;
|
||||||
|
} else {
|
||||||
|
iconRules.fileNames[nameLower] ??= langId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
const iconRulesPretty = JSON.stringify(iconRules, null, 2);
|
const iconRulesPretty = JSON.stringify(iconRules, null, 2);
|
||||||
fs.writeFileSync(fileURLToPath(new URL(`../options/fileicon/material-icon-rules.json`, import.meta.url)), iconRulesPretty);
|
fs.writeFileSync(fileURLToPath(new URL(`../options/fileicon/material-icon-rules.json`, import.meta.url)), iconRulesPretty);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user