You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JetBrains WebStorm代码检查失效且无法向Git提交推送代码问题

问题描述

我使用JetBrains旗下的WebStorm IDE开发Angular/Typescript项目,发现修改部分代码后,代码检查结果不再刷新,更严重的是我无法将改动提交/推送至VCS(git)。以下是疑似引发问题的文件部分代码:

// some code
function onlyNumberAndSeparator(value: string, decimalSeparator: DecimalSeparator = '.'): string {
  return customReplace(value, {searchFor: RegExp(`[^\\d\\${decimalSeparator}]`, 'g'), replacement: ''});
}


// ...some code

一开始我以为快速修复方案是重启IDE/清除IDE缓存,操作后确实生效了几分钟,但对同一文件做几次修改后问题再次出现。

好消息是我已经找到了问题根源,我会在第一条评论中自行给出解答。

环境信息:

WebStorm 2021.2.3
Angular 12
TypeScript: 4.3.2
ESLint: 7.26.0


解决方案

问题根源

该问题是WebStorm 2021.2及更早版本内置TypeScript语法解析器的已知Bug:当解析包含嵌套转义字符的动态正则模板字符串时,解析进程会进入无限循环,直接导致负责代码检查、文件索引、VCS状态同步的IDE后台服务挂死。

你写的正则构造语句RegExp([^\d\${decimalSeparator}], 'g')中,模板字符串内同时包含了\\d转义符和动态变量的转义前缀\\${decimalSeparator},刚好触发了该解析Bug。重启IDE/清除缓存只是临时恢复了挂死的进程,一旦IDE再次扫描到这段代码就会重新触发问题。

修复方式

  1. 临时适配方案:调整正则构造逻辑,把分隔符的转义逻辑从模板字符串内拆出来,避免嵌套转义:
    function onlyNumberAndSeparator(value: string, decimalSeparator: DecimalSeparator = '.'): string {
      // 单独处理分隔符的正则转义
      const escapedSeparator = decimalSeparator.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
      const matchRegex = new RegExp(`[^\\d${escapedSeparator}]`, 'g');
      return customReplace(value, {searchFor: matchRegex, replacement: ''});
    }
    
  2. 永久修复方案:将WebStorm升级到2021.3及以上版本,JetBrains已在后续版本中修复了该语法解析缺陷。

修改完成后,IDE后台索引会自动恢复正常,代码检查刷新、VCS提交推送功能都可正常使用。


内容的提问来源于stack exchange,提问作者VahidM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:15:03