diff --git a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts index 520603d437a854732a3e9ca0b64599de19a6c332..5dde7e23878bb6a35dd9a016ff110d71eb639c40 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts @@ -397,21 +397,24 @@ export class FileRenderer extends ActionsRenderer implements IRenderer { } private fileIconClasses(fsPath: string): string[] { - const ext = paths.extname(fsPath); - const basename = paths.basename(fsPath); - const name = basename.substring(0, basename.length - ext.length); - const langId = this.modeService.getModeIdByFilenameOrFirstLine(fsPath); - const classes = ['file-icon']; - if (ext && ext.length > 1) { - classes.push(`${this.cssEscape(ext.substr(1).toLowerCase())}-ext-file-icon`); - } + const basename = paths.basename(fsPath); + const dotSegments = basename.split('.'); + const name = dotSegments[0]; // file.txt => "file", .dockerfile => "", file.some.txt => "file" if (name) { classes.push(`${this.cssEscape(name.toLowerCase())}-name-file-icon`); } + const extensions = dotSegments.splice(1); + if (extensions.length > 0) { + for (let i = 0; i < extensions.length; i++) { + classes.push(`${this.cssEscape(extensions.slice(i).join('.').toLowerCase())}-ext-file-icon`); // add each combination of all found extensions if more than one + } + } + + const langId = this.modeService.getModeIdByFilenameOrFirstLine(fsPath); if (langId) { classes.push(`${this.cssEscape(langId)}-lang-file-icon`); }