IntelliJ 的搜索模板语言是不是有办法识别没有被 if 语句包装的函数调用

     2023-02-26     193

关键词:

【中文标题】IntelliJ 的搜索模板语言是不是有办法识别没有被 if 语句包装的函数调用【英文标题】:Does IntelliJ's search template language have a way to identify function calls not wrapped by an if statementIntelliJ 的搜索模板语言是否有办法识别没有被 if 语句包装的函数调用 【发布时间】:2020-09-29 22:20:36 【问题描述】:

我正在查看 PhpStorm 中的一些遗留代码,代码库中有一些实例,其中特定函数调用被 if 语句中的另一个函数调用包装,例如

if (thisIsTrue($param1, $param2)) 
    // possibly some function calls above
    callThisFunction($paramA, $paramB);
    // possibly some function calls below

我只使用基本的 Linux find/grep 命令来突出显示感兴趣的文件已经取得了一些成功,但我希望能够创建一个结构搜索检查,可以找到未被包裹的 callThisFunction 实例特定的 if 语句。

有谁知道这是否可以通过 vanilla IntelliJ 搜索模板功能实现?

【问题讨论】:

代码库有多大?主要是,该函数多久被调用一次?您可以将插入符号放在函数名称上并调用Edit | Find Usages | Find Usages,然后手动浏览找到的位置。 jetbrains.com/help/phpstorm/find-highlight-usages.html 虽然对于 s-s-r(结构搜索和替换)......我很难想象它是如何工作的“如果”部分。我能想到的最好的:检查前一行的内容以及它是否与某些 RegEx 不匹配...并没有真正使用匹配的内容,因此无法在这里为您提供任何真正有用的可靠示例。无论如何:jetbrains.com/help/phpstorm/structural-search-and-replace.html 【参考方案1】:

简短的回答是(仍然)不。

如果您复制现有模板“Logging without if”(在 Operators 类别中)或导入此 XML,则可以定义“不在 if 语句内”模板约束:

<searchConfiguration name="Logging without if" text="LOG.debug($Argument$);" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default">
  <constraint name="__context__" negateWithin="true" within="statement in if" contains="" />
  <constraint name="Argument" minCount="0" maxCount="2147483647" within="" contains="" />
</searchConfiguration>

但是,当 if 主体有多个语句时它不匹配,并且当我将文本修改为 $Statement1$; log.tracef($Argument$); $Statement2$; 时,我的 IntelliJ 挂起,语句的计数限制与参数相同。

您可以改为运行 2 次搜索:一次仅使用 callThisFunction($paramA, $paramB);,另一次使用整个模板,然后比较结果。

如果您将结构搜索转换为检查,然后从命令行运行这些检查 (https://www.jetbrains.com/help/idea/command-line-code-inspector.html),比较结果应该会更容易

有关“内部”约束的更多信息,请参阅 https://ijnspector.wordpress.com/2020/06/11/contained-in-constraints/

【讨论】:

pscs5文件夹里没有plugins文件夹没办法装滤镜怎么办!

不知道是不是下的版本有问题。。第一张图右边文件夹是空的打开左边文件夹下面的plugins不是文件夹的形式而且也打不开把它压缩重新打开后也是个空的文件夹求大神指教。。。不知道我用CS6的简化版。。。很少用到滤镜。。... 查看详情

IntelliJ 中是不是有“异常中断”?

】IntelliJ中是不是有“异常中断”?【英文标题】:Isthere"BreakonException"inIntelliJ?IntelliJ中是否有“异常中断”?【发布时间】:2010-10-3009:44:17【问题描述】:是否有在第一次发生异常时会自动中断调试的功能?所以我们启... 查看详情

intellij的system.out.println有快捷键没

参考技术A在eclipse中是这样的:先输入sysout,然后输入辅助快捷键:Alt+/,这样就可以自动生成:System.out.println(); 查看详情

如何让 Intellij 识别 application.yml 中的属性

】如何让Intellij识别application.yml中的属性【英文标题】:HowtogetIntellijtorecognizepropertiesinapplication.yml【发布时间】:2018-07-1810:13:51【问题描述】:我正在尝试让Intellij使用gradle识别我的属性。我已按照here的步骤进行操作。所以这意... 查看详情

Vue:.vue 模板中无法识别 pug 语言

】Vue:.vue模板中无法识别pug语言【英文标题】:Vue:puglanguagehasnotbeenrecognizedin.vuetemplate【发布时间】:2018-12-0623:51:28【问题描述】:来自Vuedocumentation:处理模板有点不同,因为大多数webpack模板加载器(例如pug-loader)返回模板函... 查看详情

使用片段时 Intellij 无法正确识别 Thymeleaf 模型变量

】使用片段时Intellij无法正确识别Thymeleaf模型变量【英文标题】:ThymeleafmodelvariablesnotrecognizedcorrectlybyIntellijwhenusingfragments【发布时间】:2019-06-1206:21:32【问题描述】:我正在尝试使用Spring-Boot并希望使用Thymeleaf作为我的模板引擎... 查看详情

为啥visualstudio2013安装后,没有c#模板?

...VB都有,就没有C#追答可能人品有问题,你回想一下最近是不是干了什么坏事,比如拿走了乞丐碗里唯一的一元钱,比如扶了地上的老奶奶。0.0 参考技术C你装的时候添加了c#语言吗 参考技术D你是不是没有安装全啊?重装一下,... 查看详情

无法让 IntelliJ 识别 proto 编译的 Java 类文件

】无法让IntelliJ识别proto编译的Java类文件【英文标题】:UnabletogetIntelliJtorecognizeprotocompiledJavaclassfiles【发布时间】:2015-05-0518:03:04【问题描述】:我们的项目中有一个build.xml,但IntelliJ无法从中导入。我得到一个:Cannotimportanything... 查看详情

Intellij 无法识别 h2 表

】Intellij无法识别h2表【英文标题】:Intellijdoesn\'trecognizeh2table【发布时间】:2019-12-2112:47:58【问题描述】:我试图关注这个tutorial,但@Table注释中有一个错误:无法解析表“EMPLOYEE”我需要做什么才能使intellij识别h2数据库并消除... 查看详情

Liferay,来自搜索的 Freemarker 错误模板,但不是来自其他链接

】Liferay,来自搜索的Freemarker错误模板,但不是来自其他链接【英文标题】:Liferay,Freemarkererrortemplatefromsearchbutnotfromotherlink【发布时间】:2018-09-3021:07:19【问题描述】:使用liferay7GA4和freemarker引擎。我们在使用freemarker引擎时遇到... 查看详情

IntelliJ IDEA 全局搜索

】IntelliJIDEA全局搜索【英文标题】:IntelliJIDEAglobalsearch【发布时间】:2011-06-2315:47:26【问题描述】:我想跨项目搜索变量用法,或者至少搜索字符串。我有IndexYourFiles,它适用于文本搜索,但我必须时不时地重新索引,并且想要... 查看详情

labview,视觉与运动

...VIEW会有更详细信息)建议用下载8XX免费升级。 参考技术B是不是你打开的图像是灰度图或者处理后的追问彩色,纯qq截图,PNG格式,3kb多 查看详情

有没有办法找出一个类是不是有一个重载的运算符?

】有没有办法找出一个类是不是有一个重载的运算符?【英文标题】:Isthereawaytofindoutifaclasshasanoverloadedoperator?有没有办法找出一个类是否有一个重载的运算符?【发布时间】:2014-04-0808:52:39【问题描述】:我正在编写一个模板... 查看详情

网站单一设计/模板不同内容

】网站单一设计/模板不同内容【英文标题】:Websitesingledesign/templatedifferentcontent【发布时间】:2014-05-0514:09:07【问题描述】:我有一个带有页眉、徽标和页脚的模板,但有多个内容不同的页面。有没有办法,而不是多次复制页面... 查看详情

识别设备是不是为 Kindle

】识别设备是不是为Kindle【英文标题】:IdentifyifdeviceisKindle识别设备是否为Kindle【发布时间】:2013-01-2500:29:02【问题描述】:我想在亚马逊的AppStore上提供一个Android应用程序。我的应用有一些基于位置的功能和相机功能,如果用... 查看详情

Thymeleaf 模板 - 有没有办法装饰模板而不是包含模板片段?

】Thymeleaf模板-有没有办法装饰模板而不是包含模板片段?【英文标题】:Thymeleaftemplates-Isthereawaytodecorateatemplateinsteadofincludingatemplatefragment?【发布时间】:2013-09-2416:04:34【问题描述】:我是第一次使用Thymeleaf,我需要澄清一下模... 查看详情

IntelliJ 无法识别来自 gradle 项目的某些导入

】IntelliJ无法识别来自gradle项目的某些导入【英文标题】:IntelliJwon\'trecognizesomeimportsfromgradleproject【发布时间】:2019-04-1721:45:18【问题描述】:我正在IntelliJ中处理Gradle项目,但IntelliJ无法识别某些包。当我转到项目结构->模块-... 查看详情

Django 模板:有没有办法根据其属性查询特定对象(而不是遍历所有对象)?

】Django模板:有没有办法根据其属性查询特定对象(而不是遍历所有对象)?【英文标题】:DjangoTemplates:Isthereawaytoqueryaspecificobjectbasedonitsproperty(insteadofiteratingoverall)?【发布时间】:2014-02-0604:00:28【问题描述】:假设我有一个对... 查看详情