V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
GPLer
V2EX  ›  程序员

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

  •  
  •   GPLer · 2022-08-15 18:43:00 +08:00 · 2306 次点击
    这是一个创建于 866 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    1. 可以关闭所有规则,即该情况下执行前后代码无变化
    2. 可以选择性的开启某些规则,规则与规则之间无依赖关系,以满足渐进式的规则配置
    3. 可以通过写插件或者写脚本实现非常精确的配置,而不只是全局的开关
    18 条回复    2022-08-16 19:58:07 +08:00
    renmu
        1
    renmu  
       2022-08-15 18:44:36 +08:00 via Android
    1 ,2 你可以设置 prettier 达成
    Jooooooooo
        2
    Jooooooooo  
       2022-08-15 18:45:26 +08:00
    idea 应该就有这种功能
    GPLer
        3
    GPLer  
    OP
       2022-08-15 19:01:59 +08:00
    @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-08-15 21:38:45 +08:00 via Android
    @GPLer 经测试,never 并不是生效了,而是配置文件中出现了意料之外的值,以至于格式化程序没有执行。。。
    参考 https://stackoverflow.com/questions/63813336/how-to-ignore-specific-rules-with-prettier
    所以说 prettier 似乎并不能满足要求。
    iamqida
        5
    iamqida  
       2022-08-15 21:39:21 +08:00
    jetbrains 家的 ide 都可以做到
    GPLer
        6
    GPLer  
    OP
       2022-08-15 21:40:09 +08:00 via Android
    @renmu 但 prettier 应该不能关闭某些规则,还是不能满足要求。
    zhuweiyou
        7
    zhuweiyou  
       2022-08-15 21:48:26 +08:00   ❤️ 1
    你在一个项目或者一个文件里,用不同的风格, 是不是你的不合理呢? 感觉除了老项目不应该格式化以外, 新项目应该统一标准.
    wu67
        8
    wu67  
       2022-08-15 21:52:05 +08:00
    其实 jb 家的 ide 可以处理这个场景. 编辑器可以按语音配置风格, 非常详细, 几乎开箱即用, 你想要自己配, 也可以微调, 设置窗口右侧有风格示例.

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

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

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

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

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

    另一方面,很多软件是可以拿到源代码并自己编译的,可以不必“从 mian 函数重写整个软件”,而是在已有源代码上魔改,从这个角度上来讲这些软件确实“无默认行为”,毕竟你可以通过源码的方式修改所有行为。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2103 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:13 · PVG 00:13 · LAX 08:13 · JFK 11:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.