IDEA 的代码检测是真的智能,但是有些人就是不关注代码飘黄 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qwerthhusn
V2EX    程序员

IDEA 的代码检测是真的智能,但是有些人就是不关注代码飘黄

  •  
  •   qwerthhusn 2019-09-24 11:14:13 +08:00 9036 次点击
    这是一个创建于 2213 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Java 静态检查工具,IDEA 自带的最智能,无论是代码优化建议还是分支检测出来的潜在的 BUG。 只要你关注代码飘黄的部分,九成都是可以优化的或者是 BUG (包括很隐晦的要自己估计很久都看不出来的),不如鼠标放上去看一下

    然后就是 FindBugs,但是以我的经验,如果 IDEA 的都处理了,FindBugs 好像也扫不出来什么东西了。

    PMD,CheckStyle 这种更像是代码风格检查工具。

    BTW:阿里巴巴的静态代码检查,我认为这种东西新手用一下还是不错的。对于经验比较丰富的老鸟,基本上无用处。举个例子,不让你用Executors.new...而是直接去用ThreadPoolExecutor,就是为了能更好理解 Java 线程池。再举个例子,要求你把每一个@Transactional都显示指定上rollbackFor,就是为了能正确理解 Spring 事务回滚机制。


    我有一个朋友,他就是没记性,去定位 BUG,最后花了很久才看出来的一个分支 BUG,而且 IDEA 都已经检测出来了。 中间我估计跟他说过不下三四次了,但是最近一看他新的代码,还是满屏密密麻麻的黄框。。。

    真的很奇怪,有些人就是不长记性,也不清楚为什么,我之前的一个刚开始干的同事,不关注代码缩进,最后一大篇代码跟鸡挠的一样,甚至有多少个方法都一眼看不出来。跟他说过无数次,但是后面发现新提交的还是那样。


    本来主旨是想吐槽一波不长记性的人,但是还是忍不住吹了一波 IDEA 的静态代码审查。

    第 1 条附言    2019-09-24 14:47:44 +08:00
    当然,不是所有的 IDEA 检测出的问题都会去处理,比如
    1. Field Injection。虽然知道不是 Best Practice,但是还是一直用。主要是 AService 和 BService 相互依赖的时候,如果不用 Field Injection 是无法搞的(虽然相互依赖不是个好习惯),但是还好出现的不多。。。我记得之前的公司代码检查有一个软件名字忘记了叫什么了(一个被定制了的 Eclipse ),就是检查相互依赖,严重依赖外部,数据类这些东西,最后得到一个数值,越小越好的那种。
    2. Access can be private/package 就是 IDEA 检查所有方法的调用的地方,并建议你把访问权限缩小。这种我一般也不会去处理。
    3. @NonNullApi 相关的,这块遇到的比较少,而且也没仔细关注。主要是在 @Override 一些框架的方法时,会在方法参数上报这些东西。由于遇到的较少,所以一直没有特别关注。跟 IDEA 认为程序的流向有点关系吧。。比如,Spring 的 Asserts.notNull(a, "a"),你写完这个,IDEA 分析的时候下面 a 肯定不会是 null,如果你后续有判断 a == null 的话会被认为是死代码(逻辑层面的死代码不是编译层面的)。。但是如果你自己封装了一个断言类,IDEA 就不认识了。
    4. 拼写错误和代码重复等。。。。这类检视问题显示的是个绿色下划线和黄色下划线,看实际情况
    5. 黑色带下划线的,多半是方法没被调用到(有可能是垃圾代码或者预留代码),泛型参数可以忽略,匿名内部类或者 lambda 可以进一步简化等。。。这种按 alt+enter 就能处理的
    46 条回复    2019-09-27 16:47:44 +08:00
    promise2mm
        1
    promise2mm  
       2019-09-24 11:26:59 +08:00
    @Transactional 类似这种飘黄 我都是直接 Disable Inspection 以后就不提示了
    qwerthhusn
        2
    qwerthhusn  
    OP
       2019-09-24 11:37:45 +08:00
    @promise2mm 那你感觉阿里的这个能检测出实际有用的东西么?举个例子
    StevenTong
        3
    StevenTong  
       2019-09-24 11:41:27 +08:00
    看人,我会去看这种东西.
    DonaidTrump
        4
    DonaidTrump  
       2019-09-24 11:41:58 +08:00   12
    不是所有人都有工匠精神,不是所有人都热爱编程,绝大部分人仅仅是把它当作一个糊口都工具,管他黄不黄呢,有饭吃就行
    300
        5
    300  
    &nbp;  2019-09-24 11:42:46 +08:00 via Android   5
    防风打火机防风但不防 sb
    xuanbg
        6
    xuanbg  
       2019-09-24 11:42:54 +08:00
    阿里规约里面 Executors.new 和 @Transactional 这两个真的是超级讨厌,我都是要 disable 掉的。
    gamexg
        7
    gamexg  
       2019-09-24 12:01:03 +08:00
    飘黄太多也挺烦人,
    而且很多我知道自己在做什么,不需要标记,但是它还是标记。

    昨天刚碰到的不必要的提示:
    一些关闭文件、连接的操作没有检查返回值是否关闭成功。
    我自认为是很小心,基本全部的返回值都会做检查,除非是实在没意义的,这种提示对我是没大意义的。

    初始化时打开配置文件检查到出错时直接 log.Fatal,Fatatl 内部会调用 os.Exit。
    但是 idea 识别不到调用了 os.Exit,还是警告文件可能为 null。
    passerbytiny
        8
    passerbytiny  
       2019-09-24 12:01:07 +08:00
    零黄与满屏黄是等价的,偶尔飘黄才有价值。工具检测只是辅助,只要没有人工评审,基本都是五十步笑百步。

    至于阿里的规则,那是给专职评审人员不写代码、只负责评审代码、懒得针对工具的不足做额外工作准备的。
    zjp
        9
    zjp  
       2019-09-24 12:11:43 +08:00 via Android
    见过别人整个屏幕都是黄色的…

    @tulongtou bug 迟早要修的。解决静态检查的告警的成本很低,多数时候 IDEA 可以自动处理
    C02TobNClov1Dz56
        10
    C02TobNClov1Dz56  
       2019-09-24 12:32:46 +08:00
    很多时候, 修的成本还是有点高的, 有的人代码组织结构不好, 跑着虽然没问题, 但是看起来及其不爽. 我之前有个睿智的同事, 一个场景有多个低级错误, 空指针数组越界一堆. equals 方法, 常量不写前面, webservice 返回的数组不判长度就直接取, String 和 Date 类型也用 equals 比较, 简直了....然后和另一个同时修这个服务的代码等于是重新开发了一遍. 他已经是我们项目组所有人都清楚的不靠谱的人了.
    C02TobNClov1Dz56
        11
    C02TobNClov1Dz56  
       2019-09-24 12:34:23 +08:00
    我写代码都尽量让代码美观易读, javadoc 都认真的写的. 甚至 javadoc 上都用 html 标签, 标注关键信息. 不是我自夸, 我是我们项目组里最强迫症的那个人.
    0x4F5DA2
        12
    0x4F5DA2  
       2019-09-24 12:37:47 +0:00
    配合 SonarLint 以及阿里规约使用效果更佳
    chocotan
        13
    chocotan  
       2019-09-24 12:53:38 +08:00
    阿里那玩意儿安装了,发现很多根本没问题的地方也提示,就删了。
    hhhsuan
        14
    hhhsuan  
       2019-09-24 12:57:16 +08:00
    没有洁癖的程序员不是好的程序员,我都是告警全部清空的,留一个都很扎眼。
    CEBBCAT
        15
    CEBBCAT  
       2019-09-24 13:04:39 +08:00 via Android
    错误报告都懒得读,还管你飘黄?你以为你老几啊?

    zhady009
        16
    zhady009  
       2019-09-24 13:13:17 +08:00
    我也有点代码洁癖..一般只有 field injection 的警告

    多注意下挺好的 起码对自己的代码质量有提升
    luckyrayyy
        17
    luckyrayyy  
       2019-09-24 13:14:52 +08:00
    我是百分百要解决的,只有提示代码重复,让我重构的可能视长度解不解决。
    Salvation
        18
    Salvation  
       2019-09-24 13:15:16 +08:00
    idea 的代码检测我关闭了不少,原因是每次代码才写到一半,就开始各种黄,难受。
    dobelee
        19
    dobelee  
       2019-09-24 13:17:07 +08:00 via Android
    坚决扫荡任何一片黄色。
    L5tEU4WX072p5P42
        20
    L5tEU4WX072p5P42  
       2019-09-24 13:23:07 +08:00   2
    以后测试组就叫 扫黄打红小组 吧
    qiyuey
        21
    qiyuey  
       2019-09-24 13:52:49 +08:00
    无非就是:懒、笨、又懒又笨
    chendy
        22
    chendy  
       2019-09-24 14:06:28 +08:00   1
    曾经接手老项目,打开代码仿佛有人尿在了屏幕上一样…
    iffi
        23
    iffi  
       2019-09-24 14:21:09 +08:00
    SonarLint 飘过
    zek
        24
    zek  
       2019-09-24 15:08:31 +08:00
    虽然看着难受,但是真没时间管它
    way2create
        25
    way2create  
       2019-09-24 15:23:09 +08:00
    我觉得 jb 家的错误呈现方式挺好的,vscode 插件那种挺烦的,有些 warning 又不是错误 仅仅是没检测到 自己的项目还好 看别人的老项目就特烦了 也不可能一个个去弄 有些也没必要弄
    shanlan
        26
    shanlan  
       2019-09-24 15:45:28 +08:00
    接手遗留的项目,满屏幕的黄点点、波浪线,WebStorm
    pwrliang
        27
    pwrliang  
       2019-09-24 15:49:57 +08:00
    +1,Idea 的 check 真的很好。除非那种带范型的类型强转检查的话一般我不会 fix,其他的都会 fix。
    l8g
        28
    l8g  
       2019-09-24 15:52:01 +08:00
    黄的我一般能处理的都会处理掉,关掉简直就是掩耳盗铃。
    fvckDaybyte2
        29
    fvckDaybyte2  
       2019-09-24 16:14:23 +08:00 via iPhone
    扫黄小组?
    liuhuansir
        30
    liuhuansir  
       2019-09-24 16:24:10 +08:00
    @shanlan webstorm 不太准,可能是因为 js 是动态语言吧,很多波浪线根本没法解决,比如 Unresolved variable xxx 这种
    gIrl1990
        31
    gIrl1990  
       2019-09-24 16:55:17 +08:00
    这就是偏洁癖或者强迫症那一类了
    FightForFreedom
        32
    FightForFreedom  
       2019-09-24 16:58:39 +08:00
    有一说一,阿里的检查插件,一些检查出的错误想 suppressWarning 都 suppress 不了
    hitoriga
        33
    hitoriga  
       2019-09-24 17:17:40 +08:00
    有个段子,说的是电梯井在维修,门敞着,门口放着个牌子上面写着"ERROR",有个路人觉得很奇怪说这么危险的东西怎么才放个 error 在这里啊,拿了个 WARNING 牌子把原本的替换掉了。

    于是当天好多程序员掉下去摔死了
    aguesuka
        34
    aguesuka  
       2019-09-24 19:05:06 +08:00 via Android
    1.用构造方法注入。2.如果是单个项目,按照 idea 的做不会有问题。如果是要打成 jar 包,用接口。4 拼写错误 alt+回车可以保存单词,代码重复十有八九可以抽象,5.这种警告让我学了不少东西。
    starsriver
        35
    starsriver  
       2019-09-24 19:20:44 +08:00 via Android
    我直接在控制器里面噜 sql,一片黄。懒得分模块。
    0NF09LJPS51k57uH
        36
    0NF09LJPS51k57uH  
       2019-09-24 19:25:32 +08:00
    @xuanbg 我们团队严禁使用 Executors 的任何 new 线程池方法,我们的业务量比较大,不指定队列长度很有可能会 OOM
    magiclz233
        37
    magiclz233  
       2019-09-24 19:26:45 +08:00
    mybatis mapper.xml 里面全部飘黄,是不是也得改。本来就测试 Executors 想快点敲一个线程池,在那飘黄。无语了
    Varobjs
        38
    Varobjs  
       2019-09-24 19:27:10 +08:00 via Android
    phpstorm 也是会提示很多 warn 什么的
    有的人就是不管。看别人代码难受
    比如 写 很多 if else 每个分支定义相同变量,但有的分支会漏掉,IDE 就可以提示。
    同样用 IDE 真烦有人写出来的,跟 text editor 写出来的一样。

    还有代码格式化问题, 随手一个 Ctrl + Alt + l,Ctrl + Alt + o 很难吗
    Varobjs
        39
    Varobjs  
       2019-09-24 19:28:45 +08:00 via Android
    @aguesuka alt + 回车 真好用,然而 很多人不知道。
    lavvrence
        40
    lavvrence  
       2019-09-24 19:29:23 +08:00
    扫黄!问一下你们 @Autowired 注入的时候,是改成构造注入吗?
    xuanbg
        41
    xuanbg  
       2019-09-24 19:37:59 +08:00
    2.0 后就不用 @Autowired 了,构造方法参数自动注入挺好的
    yanguangs
        42
    yanguangs  
       2019-09-24 19:42:45 +08:00
    @magiclz233 你没有在 idea 里面链接数据库吧?
    itechify
        43
    itechify  
    PRO
       2019-09-25 07:44:56 +08:00 via Android
    配合阿里的插件,扫除更多的飘黄我就很烦,自己打的新的代码,硬生生改成没有黄色才舒服。
    xaplux
        44
    xaplux  
       2019-09-25 08:53:55 +08:00 via Android
    代码洁癖,不允许飘黄,确实没有问题的情况就把对应的警告提示关闭
    burnbrid
        45
    burnbrid  
       2019-09-25 09:59:20 +08:00
    社区版本会飘黄吗? idea 这么好用啊 ?社区版本会飘黄吗,社区版本会飘我也下载一个区。
    lzh414895156
        46
    lzh414895156  
       2019-09-27 16:47:44 +08:00
    强迫症的我表示代码里没有一个飘黄...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5735 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 02:58 PVG 10:58 LAX 19:58 JFK 22:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86