Skip to content

Commit f8df529

Browse files
authored
feat: add icons next to file names in the search result (#136)
* feat: add icons next to file names * chore: add unit test for icon * refactor: get instance of FileTypeManager on the class level
1 parent 933a4da commit f8df529

2 files changed

Lines changed: 23 additions & 0 deletions

File tree

src/main/kotlin/com/mituuz/fuzzier/FuzzyAction.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
*/
2424
package com.mituuz.fuzzier
2525

26+
import com.intellij.icons.AllIcons
2627
import com.intellij.openapi.actionSystem.*
2728
import com.intellij.openapi.components.service
2829
import com.intellij.openapi.editor.Caret
@@ -32,6 +33,7 @@ import com.intellij.openapi.editor.actionSystem.EditorActionHandler
3233
import com.intellij.openapi.editor.actionSystem.EditorActionManager
3334
import com.intellij.openapi.editor.event.DocumentEvent
3435
import com.intellij.openapi.editor.event.DocumentListener
36+
import com.intellij.openapi.fileTypes.FileTypeManager
3537
import com.intellij.openapi.keymap.KeymapManager
3638
import com.intellij.openapi.project.Project
3739
import com.intellij.openapi.ui.popup.JBPopup
@@ -64,6 +66,7 @@ abstract class FuzzyAction : AnAction() {
6466
protected lateinit var projectState: FuzzierSettingsService.State
6567
protected val globalState = service<FuzzierGlobalSettingsService>().state
6668
protected var defaultDoc: Document? = null
69+
private val fileTypeManager = FileTypeManager.getInstance()
6770

6871
@Volatile
6972
var currentTask: Future<*>? = null
@@ -228,6 +231,10 @@ abstract class FuzzyAction : AnAction() {
228231
false -> container.getDisplayString(globalState)
229232
}
230233

234+
val ft = fileTypeManager.getFileTypeByFileName(container.filename)
235+
val icon = ft.icon ?: AllIcons.FileTypes.Unknown
236+
renderer.icon = icon
237+
231238
globalState.fileListSpacing.let {
232239
renderer.border = BorderFactory.createEmptyBorder(it, 0, it, 0)
233240
}

src/test/kotlin/com/mituuz/fuzzier/FuzzyActionTest.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ package com.mituuz.fuzzier
2626
import com.intellij.openapi.actionSystem.AnActionEvent
2727
import com.intellij.openapi.actionSystem.IdeActions
2828
import com.intellij.openapi.editor.actionSystem.EditorActionManager
29+
import com.intellij.openapi.fileTypes.FileTypeManager
2930
import com.intellij.openapi.project.Project
3031
import com.intellij.openapi.ui.popup.JBPopup
3132
import com.intellij.openapi.ui.popup.JBPopupFactory
@@ -168,6 +169,21 @@ class FuzzyActionTest {
168169
assertEquals("/src/asd", component.text)
169170
}
170171

172+
@Test
173+
fun `Check renderer icon for different file types`() {
174+
val action = getAction()
175+
action.setFiletype(FILENAME_ONLY)
176+
action.component = SimpleFinderComponent()
177+
action.component.isDirSelector = true
178+
val renderer = action.getCellRenderer()
179+
val dummyList = JList<FuzzyMatchContainer>()
180+
val container = FuzzyMatchContainer(FuzzyScore(), "/src/asd", "asd.kt", "")
181+
val expectedIcon = FileTypeManager.getInstance().getFileTypeByFileName("asd.kt").icon
182+
val component = renderer.getListCellRendererComponent(dummyList, container, 0, false, false) as JLabel
183+
assertNotNull(component.icon)
184+
assertEquals(expectedIcon, component.icon)
185+
}
186+
171187
private fun getAction(): FuzzyAction {
172188
return object : FuzzyAction() {
173189
override fun actionPerformed(actionEvent: AnActionEvent) {

0 commit comments

Comments
 (0)