是否存在无默认行为的代码格式化工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
GPLer

是否存在无默认行为的代码格式化工具

  •  
  •   GPLer 2022 年 8 月 15 日 3041 次点击
    这是一个创建于 1350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不可否认,代码格式化工具非常有用,但例如 prettier 这样的代码格式化工具,在规范代码的同时会强制你做出取舍,比如在一个 Javascript 项目里包裹字符串只能用单引号或者只能用双引号,但可能我只想要统一缩进,结果它把单双引号也统一了。

    那么是否存在一种代码格式化工具,可以最小程度的修改代码,以满足高可读性的要求呢?

    简单来说,该工具应满足以下条件:

    1. 可以关闭所有规则,即该情况下执行前后代码无变化
    2. 可以选择性的开启某些规则,规则与规则之间无依赖关系,以满足渐进式的规则配置
    3. 可以通过写插件或者写脚本实现非常精确的配置,而不只是全局的开关
    18 条回复    2022-08-16 19:58:07 +08:00
    renmu
        1
    renmu  
       2022 年 8 月 15 日 via Android
    1 ,2 你可以设置 prettier 达成
    Jooooooooo
        2
    Jooooooooo  
       2022 年 8 月 15 日
    idea 应该就有这种功能
    GPLer
        3
    GPLer  
    OP
       2022 年 8 月 15 日
    @renmu 第一条我参考 ![Is there a way to ignore a specific rule? [Possible Feature] #9171]( https://github.com/prettier/prettier/issues/9171) 试了下,像 `singleQuote` 的配置项,配置成 'never' 后确实不生效的,也就是说是可行的,还是我太急躁了,感谢大佬。
    至于第二条,其实 prettier 好像本来就是这样的
    第三条估计 prettier 也能做到,但是插件的方式还是挺麻烦的,能做到一、二也够用了。
    GPLer
        4
    GPLer  
    OP
       2022 年 8 月 15 日 via Android
    @GPLer 经测试,never 并不是生效了,而是配置文件中出现了意料之外的值,以至于格式化程序没有执行。。。
    参考 https://stackoverflow.com/questions/63813336/how-to-ignore-specific-rules-with-prettier
    所以说 prettier 似乎并不能满足要求。
    iamqida
        5
    iamqida  
       2022 年 8 月 15 日
    jetbrains 家的 ide 都可以做到
    GPLer
        6
    GPLer  
    OP
       2022 年 8 月 15 日 via Android
    @renmu 但 prettier 应该不能关闭某些规则,还是不能满足要求。
    zhuweiyou
        7
    zhuweiyou  
       2022 年 8 月 15 日   1
    你在一个项目或者一个文件里,用不同的风格, 是不是你的不合理呢? 感觉除了老项目不应该格式化以外, 新项目应该统一标准.
    wu67
        8
    wu67  
       2022 年 8 月 15 日
    其实 jb 家的 ide 可以处理这个场景. 编辑器可以按语音配置风格, 非常详细, 几乎开箱即用, 你想要自己配, 也可以微调, 设置窗口右侧有风格示例.

    prettier 其实也可以大体上的设置, 但是不算开箱即用(个人认为). 折腾半天还需要配合 eslint 修一遍才行(个人做法是 prettier 格式化一边, 然后 eslint 修一遍), 这样才能符合我对代码风格的期望. 仅 vue 场景, react 未知.

    现在不怎么搞 idea 了(其实是穷得不想买), 凑合着用 vsc, 用是能用, 就是各种不方便

    可以看看这篇文章 https://blog.isayme.org/posts/issues-50/ 这是我以前配置 vsc 时参考的文章之一
    molvqingtai
        9
    molvqingtai  
       2022 年 8 月 15 日
    你这不是说的 eslint 吗
    Nugine0
        10
    Nugine0  
       2022 年 8 月 15 日 via Android
    试试 dprint
    placeholder
        11
    placeholder  
       2022 年 8 月 15 日
    没有,不用找了,我找了好久了。
    liulangyude
        12
    liulangyude  
       2022 年 8 月 15 日
    @wu67 破解啊,现在网上教程一大堆,正版主义者的话当我没说
    wu67
        13
    wu67  
       2022 年 8 月 15 日
    @liulangyude hhh, 很快就会有一堆人来批你了...在这网站正版是政治正确. 另外我就是懒得折腾了, 基本每次升级都会失效
    mingl0280
        14
    mingl0280  
       2022 年 8 15 日
    Visual Studio 就行了呗。
    94
        15
    94  
       2022 年 8 月 16 日
    所有的代码格式化工具都会提供配置项的吧....
    如果只需要某几项,可以单独自己搞一个风格,然后只检查自己配置的项目的。

    可以放到编辑器的配置项里面全局使用,也可以搞到项目目录下只检查项目内的编码风格。
    Vaspike
        16
    Vaspike  
       2022 年 8 月 16 日
    @liulangyude #12
    是的,我就是正版主义者,我来了
    一千多买一年用来吃饭的家伙,贵么
    人人都盗版,Jetbrains 倒闭指日可待
    另外,OP 说的功能 JB 系 IDE 都可以做到
    yangzzzzzz
        17
    yangzzzzzz  
       2022 年 8 月 16 日
    eslint 改一下格式化风格应该可以满足,airbnb 、prettier 、还有标准的风格,基于这些自己在修改参数
    secondwtq
        18
    secondwtq  
       2022 年 8 月 16 日
    可以说存在,也可以说不存在。

    对于一个黑盒的软件成品来说,“无默认行为”by definition 是不可能的,因为这个软件设计的“功能”就是“行为”的一部分。“无默认行为”等于“无默认功能”,追求完全的自定义,最后都会扩大化到从 mian 函数重写整个软件。

    另一方面,很多软件是可以拿到源代码并自己编译的,可以不必“从 mian 函数重写整个软件”,而是在已有源代码上魔改,从这个角度上来讲这些软件确实“无默认行为”,毕竟你可以通过源码的方式修改所有行为。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1184 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 53ms UTC 17:26 PVG 01:26 LAX 10:26 JFK 13:26
    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