首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   qwerthhusn · 76 天前 · 4817 次点击
    这是一个创建于 76 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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


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

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


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

    第 1 条附言  ·  76 天前
    当然,不是所有的 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
        1
    promise2mm   76 天前
    @Transactional 类似这种飘黄 我都是直接 Disable Inspection 以后就不提示了
        2
    qwerthhusn   76 天前
    @promise2mm 那你感觉阿里的这个能检测出实际有用的东西么?举个例子
        3
    StevenTong   76 天前
    看人,我会去看这种东西.
        4
    tulongtou   76 天前   ♥ 12
    不是所有人都有工匠精神,不是所有人都热爱编程,绝大部分人仅仅是把它当作一个糊口都工具,管他黄不黄呢,有饭吃就行
        5
    winterbells   76 天前 via Android   ♥ 5
    防风打火机防风但不防 sb
        6
    xuanbg   76 天前
    阿里规约里面 Executors.new 和 @Transactional 这两个真的是超级讨厌,我都是要 disable 掉的。
        7
    gamexg   76 天前
    飘黄太多也挺烦人,
    而且很多我知道自己在做什么,不需要标记,但是它还是标记。

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

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

    至于阿里的规则,那是给专职评审人员——不写代码、只负责评审代码、懒得针对工具的不足做额外工作——准备的。
        9
    zjp   76 天前 via Android
    见过别人整个屏幕都是黄色的…

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

        16
    zhady009   76 天前
    我也有点代码洁癖..一般只有 field injection 的警告

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

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

    还有代码格式化问题, 随手一个 Ctrl + Alt + l,Ctrl + Alt + o 很难吗
        39
    Varobjs   76 天前 via Android
    @aguesuka alt + 回车 真好用,然而 很多人不知道。
        40
    jaylee4869   76 天前
    扫黄!问一下你们 @Autowired 注入的时候,是改成构造注入吗?
        41
    xuanbg   76 天前
    2.0 后就不用 @Autowired 了,构造方法参数自动注入挺好的
        42
    yanguangs   76 天前
    @magiclz233 你没有在 idea 里面链接数据库吧?
        43
    oneisall8955   75 天前 via Android
    配合阿里的插件,扫除更多的飘黄我就很烦,自己打的新的代码,硬生生改成没有黄色才舒服。
        44
    xaplux   75 天前 via Android
    代码洁癖,不允许飘黄,确实没有问题的情况就把对应的警告提示关闭
        45
    burnbrid   75 天前
    社区版本会飘黄吗? idea 这么好用啊 ?社区版本会飘黄吗,社区版本会飘我也下载一个区。
        46
    lzh414895156   73 天前
    强迫症的我表示代码里没有一个飘黄...
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   945 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 21:32 · PVG 05:32 · LAX 13:32 · JFK 16:32
    ♥ Do have faith in what you're doing.