mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-190937 Change scratch language not always updates file extension 2
Support scratches with 1. no extension (e.g. scratch1) 2. multipart extension (e.g. blade) 3. undetectable extensions (e.g. ApacheConfig)
This commit is contained in:
@@ -21,6 +21,7 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.fileTypes.UnknownFileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
@@ -56,28 +57,37 @@ public class ScratchUtil {
|
||||
|
||||
if (file == null) return;
|
||||
Language language = LanguageUtil.getLanguageForPsi(project, file);
|
||||
FileType expected = getFileTypeFromName(file);
|
||||
FileType actual = language == null ? null : language.getAssociatedFileType();
|
||||
if (expected == actual || actual == null) return;
|
||||
String ext = actual.getDefaultExtension();
|
||||
if (StringUtil.isEmpty(ext)) return;
|
||||
|
||||
FileType prevType = getFileTypeFromName(file);
|
||||
FileType currType = language == null ? null : language.getAssociatedFileType();
|
||||
if (prevType == currType) return;
|
||||
String prevExt = PathUtil.makeFileName("", prevType == null ? "" : prevType.getDefaultExtension());
|
||||
String currExt = currType == null ? "" : currType.getDefaultExtension();
|
||||
// support multipart extensions like *.blade.php
|
||||
String nameWithoutExtension = prevExt.length() > 0 && file.getName().endsWith(prevExt) ?
|
||||
StringUtil.trimEnd(file.getName(), prevExt) : file.getNameWithoutExtension();
|
||||
VirtualFile parent = file.getParent();
|
||||
String newName = parent != null ? VfsUtil.getNextAvailableName(parent, file.getNameWithoutExtension(), ext) :
|
||||
PathUtil.makeFileName(file.getNameWithoutExtension(), ext);
|
||||
String newName = parent != null ? VfsUtil.getNextAvailableName(parent, nameWithoutExtension, currExt) :
|
||||
PathUtil.makeFileName(nameWithoutExtension, currExt);
|
||||
file.rename(ScratchUtil.class, newName);
|
||||
}
|
||||
|
||||
public static boolean hasMatchingExtension(@NotNull Project project, @NotNull VirtualFile file) {
|
||||
if (file.getExtension() == null) return true;
|
||||
FileType expected = getFileTypeFromName(file);
|
||||
Language language = LanguageUtil.getLanguageForPsi(project, file);
|
||||
FileType actual = language == null ? null : language.getAssociatedFileType();
|
||||
return expected == actual && actual != null;
|
||||
if (expected != null && expected == actual) return true;
|
||||
String ext = actual == null ? "" : actual.getDefaultExtension();
|
||||
return ext.length() > 0 && file.getName().endsWith(ext);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static FileType getFileTypeFromName(@NotNull VirtualFile file) {
|
||||
String extension = file.getExtension();
|
||||
return extension == null ? null : FileTypeManager.getInstance().getFileTypeByExtension(extension);
|
||||
if (file.getExtension() == null) return null;
|
||||
FileType result = FileTypeManager.getInstance().getFileTypeByFileName(file.getName());
|
||||
if (result == UnknownFileType.INSTANCE || StringUtil.isEmpty(result.getDefaultExtension())) {
|
||||
return null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user