我正在处理使用德语来命名类,符号和文件的代码。所有德语特殊字符如ä,ü,ö和ß都以音译形式使用,即“ae”代表“ä”,“oe”代表“ö”等。
由于没有技术上的理由再这样做,我正在评估是否允许以自然形式使用变音符号等是可行的。这里最大的问题是,一旦使用变音符号,将会有不一致的命名。即一个类可以命名为“ÖffentlicheAuftragsübernahme”(新形式)或“OeffentlicheAuftragsuebernahme”(旧形式)。这将使搜索类,符号和文件更加困难。
有没有办法扩展IntelliJ IDEA的搜索(确切地说是代码导航),忽略名称是用变音符号还是用音译编写的?
我想,这需要修改IDEA索引文件的方式。插件可以实现吗?或者是否有不同的方法来实现预期的结果?
鉴于课程“KlasseÄ”“KlasseAe”,“KlasseOe”,“KlasseÜ”
IDEA“导航到课程”(CTRL + N) - >找到结果
答案 0 :(得分:0)
实际上这很容易实现,不需要索引更改。您需要做的就是实现ChooseByNameContributor接口并将其注册为gotoClassContributor
扩展点的扩展。在您的实现中,您可以使用IDEA的现有索引来查找具有拼写替代名称的类,并从getItemsByName
返回它们。
答案 1 :(得分:0)
您可以提供自己的com.intellij.navigation.GotoClassContributor
实例,并在getItemsByName()
中查找PSI类索引中输入名称的不同变体。
例如,如果您扩展com.intellij.ide.util.gotoByName.DefaultClassNavigationContributor
,则可以实现如下方法:
@Override
@NotNull
public NavigationItem[] getItemsByName(String name, final String pattern, Project project, boolean includeNonProjectItems) {
List<NavigationItem> result = new ArrayList<>();
Processor<NavigationItem> processor = Processors.cancelableCollectProcessor(result);
List<String> variants = substituteUmlauts(name);
for (String variant : variants) {
processElementsWithName(variant, processor, FindSymbolParameters.wrap(pattern, project, includeNonProjectItems));
}
return result.isEmpty() ? NavigationItem.EMPTY_NAVIGATION_ITEM_ARRAY :
result.toArray(new NavigationItem[result.size()]);
}
substituteUmlauts()
将计算您在搜索框中输入内容的所有不同版本,所有结果将汇总在result
中。