From 9ca65b4df67bbda747f2ea270a70442da7411923 Mon Sep 17 00:00:00 2001
From: arookieofc <2128194521@qq.com>
Date: Sun, 1 Nov 2026 05:15:12 +0800
Subject: [PATCH] fix(ui): use dedicated icons for Rust, Cargo and ignore files
(#616)
`.rs`, `Cargo.toml` and `Cargo.lock` used custom badges or the generic lock, and `.gitignore` used the git logo. They now have dedicated Rust, Cargo and Cargo lock icons with dark variants, and `.gitignore` and `.gitignore_global` share the ignored-file icon with the other ignore files. The icons' source and MIT licence are recorded in `THIRD_PARTY_LICENSES.md`.
Co-authored-by: a-rookie-of-C-language <186315048+a-rookie-of-C-language@users.noreply.github.com>
---
THIRD_PARTY_LICENSES.md | 35 ++++++++++++++++++++++-
src/ui/expui/fileTypes/cargo.svg | 8 ++++++
src/ui/expui/fileTypes/cargoLock.svg | 13 +++++++++
src/ui/expui/fileTypes/cargoLock_dark.svg | 13 +++++++++
src/ui/expui/fileTypes/cargo_dark.svg | 8 ++++++
src/ui/expui/fileTypes/rust.svg | 4 +++
src/ui/expui/fileTypes/rust_dark.svg | 4 +++
src/ui/icons.test.tsx | 4 +--
src/ui/icons.tsx | 13 +++++----
src/ui/openidea/fileTypes/cargo.svg | 3 --
src/ui/openidea/fileTypes/cargo_dark.svg | 3 --
src/ui/openidea/fileTypes/rust.svg | 3 --
src/ui/openidea/fileTypes/rust_dark.svg | 3 --
13 files changed, 93 insertions(+), 21 deletions(-)
create mode 100644 src/ui/expui/fileTypes/cargo.svg
create mode 100644 src/ui/expui/fileTypes/cargoLock.svg
create mode 100644 src/ui/expui/fileTypes/cargoLock_dark.svg
create mode 100644 src/ui/expui/fileTypes/cargo_dark.svg
create mode 100644 src/ui/expui/fileTypes/rust.svg
create mode 100644 src/ui/expui/fileTypes/rust_dark.svg
delete mode 100644 src/ui/openidea/fileTypes/cargo.svg
delete mode 100644 src/ui/openidea/fileTypes/cargo_dark.svg
delete mode 100644 src/ui/openidea/fileTypes/rust.svg
delete mode 100644 src/ui/openidea/fileTypes/rust_dark.svg
diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md
index 6903ad3d..d184ef89 100644
--- a/THIRD_PARTY_LICENSES.md
+++ b/THIRD_PARTY_LICENSES.md
@@ -27,6 +27,14 @@ icon set, copied unmodified (some renamed) from JetBrains' open-source repositor
`fileTypes/hashiCorp`, Apache-2.0); `makefile` (`expui/makefile` →
`fileTypes/makefile`, MIT, Copyright (c) 2016 Victor Kropp — full text below).
+- [intellij-rust](https://github.com/intellij-rust/intellij-rust) (MIT):
+ `src/main/resources/icons/expui/rustFile{,_dark}.svg` →
+ `src/ui/expui/fileTypes/rust{,_dark}.svg`;
+ `src/main/resources/icons/expui/cargo{,_dark}.svg` and `cargoLock{,_dark}.svg` →
+ `src/ui/expui/fileTypes/cargo{,_dark}.svg` and `cargoLock{,_dark}.svg`.
+ Copyright (c) 2015 Aleksey Kladov, Evgeny Kurbatsky, Alexey Kudinkin and contributors;
+ Copyright (c) 2016 JetBrains. MIT licence, full text below.
+
At render time `src/ui/icons.tsx` may recolour monochrome icons to `currentColor`.
## JetBrains IntelliJ Platform diff algorithm
@@ -43,7 +51,7 @@ from its tests (`LineComparisonUtilTest`, `WordComparisonUtilTest`,
JetBrains s.r.o. and contributors. Apache License 2.0 (below).
`src/ui/openidea/**` holds OpenIDEA's own file-type icons drawn in the expui style for
-languages whose JetBrains icons are not open source (Go, Rust, Ruby, Dart, Lua, Zig,
+languages whose JetBrains icons are not open source (Go, Ruby, Dart, Lua, Zig,
Svelte, …). Those using the page-with-corner-badge layout (`goMod`, `goWork`,
`dotenv`, `readme`, `lock`, `license`) reuse the page outline of the Apache-2.0
expui `fileTypes/h.svg`; that outline is modified from the original by JetBrains.
@@ -54,6 +62,31 @@ The lettering in `src-tauri/icons/source/openidea-wordmark*.svg` is outlined fro
Inter Tight (Copyright 2022 The Inter Project Authors, SIL Open Font License 1.1,
https://github.com/rsms/inter-tight).
+### MIT License (Rust and Cargo icons)
+
+The MIT License (MIT)
+
+Copyright (c) 2015 Aleksey Kladov, Evgeny Kurbatsky, Alexey Kudinkin and contributors
+Copyright (c) 2016 JetBrains
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
### MIT License (makefile icon)
Copyright (c) 2016 Victor Kropp
diff --git a/src/ui/expui/fileTypes/cargo.svg b/src/ui/expui/fileTypes/cargo.svg
new file mode 100644
index 00000000..c0ff3dca
--- /dev/null
+++ b/src/ui/expui/fileTypes/cargo.svg
@@ -0,0 +1,8 @@
+
+
diff --git a/src/ui/expui/fileTypes/cargoLock.svg b/src/ui/expui/fileTypes/cargoLock.svg
new file mode 100644
index 00000000..6ca8a0f3
--- /dev/null
+++ b/src/ui/expui/fileTypes/cargoLock.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/src/ui/expui/fileTypes/cargoLock_dark.svg b/src/ui/expui/fileTypes/cargoLock_dark.svg
new file mode 100644
index 00000000..51ff219f
--- /dev/null
+++ b/src/ui/expui/fileTypes/cargoLock_dark.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/src/ui/expui/fileTypes/cargo_dark.svg b/src/ui/expui/fileTypes/cargo_dark.svg
new file mode 100644
index 00000000..2e8280bb
--- /dev/null
+++ b/src/ui/expui/fileTypes/cargo_dark.svg
@@ -0,0 +1,8 @@
+
+
diff --git a/src/ui/expui/fileTypes/rust.svg b/src/ui/expui/fileTypes/rust.svg
new file mode 100644
index 00000000..2e75852f
--- /dev/null
+++ b/src/ui/expui/fileTypes/rust.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/src/ui/expui/fileTypes/rust_dark.svg b/src/ui/expui/fileTypes/rust_dark.svg
new file mode 100644
index 00000000..e4ab4540
--- /dev/null
+++ b/src/ui/expui/fileTypes/rust_dark.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/src/ui/icons.test.tsx b/src/ui/icons.test.tsx
index 72611ce4..484a454a 100644
--- a/src/ui/icons.test.tsx
+++ b/src/ui/icons.test.tsx
@@ -112,7 +112,7 @@ describe("fileIconName", () => {
["yarn.lock", "file-lock"],
["pnpm-lock.yaml", "file-lock"],
["Cargo.toml", "file-cargo"],
- ["Cargo.lock", "file-lock"],
+ ["Cargo.lock", "file-cargo-lock"],
["poetry.lock", "file-lock"],
["Gemfile", "file-ruby"],
["Gemfile.lock", "file-lock"],
@@ -174,7 +174,7 @@ describe("fileIconName", () => {
["config.hcl", "file-hcl"],
["Jenkinsfile", "file-jenkins"],
["BUILD.bazel", "file-bazel"],
- [".gitignore", "file-git"],
+ [".gitignore", "file-ignored"],
[".editorconfig", "file-config"],
[".env", "file-dotenv"],
[".env.example", "file-dotenv"],
diff --git a/src/ui/icons.tsx b/src/ui/icons.tsx
index 7d5a8e04..796e6b56 100644
--- a/src/ui/icons.tsx
+++ b/src/ui/icons.tsx
@@ -121,8 +121,9 @@ const ICONS = {
"file-go": "openidea/fileTypes/go",
"file-gomod": "openidea/fileTypes/goMod",
"file-gowork": "openidea/fileTypes/goWork",
- "file-rust": "openidea/fileTypes/rust",
- "file-cargo": "openidea/fileTypes/cargo",
+ "file-rust": "fileTypes/rust",
+ "file-cargo": "fileTypes/cargo",
+ "file-cargo-lock": "fileTypes/cargoLock",
"file-ruby": "openidea/fileTypes/ruby",
"file-lua": "openidea/fileTypes/lua",
"file-zig": "openidea/fileTypes/zig",
@@ -755,9 +756,9 @@ const FILE_NAMES = table({
"file-makefile": "makefile gnumakefile bsdmakefile makefile.am makefile.in kbuild",
"file-cmake": "cmakelists.txt cmakecache.txt",
"file-perl": "makefile.pl build.pl cpanfile",
- "file-git": ".gitignore .gitignore_global .gitattributes .gitmodules .gitconfig .git-blame-ignore-revs .mailmap",
+ "file-git": ".gitattributes .gitmodules .gitconfig .git-blame-ignore-revs .mailmap",
"file-ignored":
- ".dockerignore .npmignore .prettierignore .eslintignore .stylelintignore .hgignore .ignore .rgignore " +
+ ".gitignore .gitignore_global .dockerignore .npmignore .prettierignore .eslintignore .stylelintignore .hgignore .ignore .rgignore " +
".fdignore .helmignore .vscodeignore .gcloudignore .slugignore .cfignore .bzrignore .containerignore",
"file-config":
".editorconfig justfile procfile .npmrc .nvmrc .yarnrc .node-version .python-version .ruby-version " +
@@ -767,6 +768,7 @@ const FILE_NAMES = table({
"file-lock":
"package-lock.json npm-shrinkwrap.json pnpm-lock.yaml bun.lockb deno.lock go.sum go.work.sum " + "package.resolved",
"file-cargo": "cargo.toml",
+ "file-cargo-lock": "cargo.lock",
"file-gomod": "go.mod",
"file-gowork": "go.work",
"file-pyproject": "pyproject.toml",
@@ -845,8 +847,7 @@ const EXT_ICONS = table({
"file-config": "ini cfg conf cnf inf reg url desktop service socket timer config",
"file-dotenv": "env",
"file-lock": "lock lockb",
- "file-git": "gitignore",
- "file-ignored": "dockerignore",
+ "file-ignored": "dockerignore gitignore",
"file-properties": "properties prefs",
"file-font": "ttf otf woff woff2",
"file-patch": "patch diff rej",
diff --git a/src/ui/openidea/fileTypes/cargo.svg b/src/ui/openidea/fileTypes/cargo.svg
deleted file mode 100644
index 66d1b50d..00000000
--- a/src/ui/openidea/fileTypes/cargo.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/src/ui/openidea/fileTypes/cargo_dark.svg b/src/ui/openidea/fileTypes/cargo_dark.svg
deleted file mode 100644
index 0e6d3aa8..00000000
--- a/src/ui/openidea/fileTypes/cargo_dark.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/src/ui/openidea/fileTypes/rust.svg b/src/ui/openidea/fileTypes/rust.svg
deleted file mode 100644
index a9d64b51..00000000
--- a/src/ui/openidea/fileTypes/rust.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/src/ui/openidea/fileTypes/rust_dark.svg b/src/ui/openidea/fileTypes/rust_dark.svg
deleted file mode 100644
index f0bd410d..00000000
--- a/src/ui/openidea/fileTypes/rust_dark.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-