Angular(03)-- lint风格规范和WebStorm小技巧

在开始讲 Angular 各个核心知识点之前,想先来讲讲开发工具 WebStorm 的一些配置以及相应配置文件如 tslint.json 的配置。

因为我个人比较注重代码规范、代码风格,而对于这些规范,我只有一个观点:一切需要依赖开发人员的主观意识去遵守的规范都没有多大意义。

以前做 Android 开发时会借助 AndroidStudio 来强制遵守一些规范,现在前端项目我用的是 WebStorm 开发,这两个开发工具本质上同源,所以很多功能都差不多。

那么,这篇就来讲一讲,如何对 WebStorm 进行一些设置,让它可以更好的辅助我们遵守风格规范,同时,理清一些比如 tslint.json 的配置,来让开发工具实时检测我们写的代码是否有很好的遵守规范。

风格规范

Angular 项目的很多文件都是通过 Angular-CLI 工具的 ng 命令来生成的,生成时就有默认一些代码风格,而且,WebStorm 默认也有一些代码风格,也许有人觉得直接使用默认的风格来即可。

但对于默认的一些风格规范,我不是很赞同,比如说:

name: string = ‘dasu‘

简单的在某个类中声明这么一个 name 变量,类型是 string,初始值为 dasu,但默认的 tslint.json 配置的代码风格会报错,因为它建议我们,既然已经初始化为字符串类型了,就没有必要再去声明变量的类型了。

对于这种默认风格,我个人并不赞同,因为个人习惯了 Java 的风格,对于变量的类型声明已经习惯了,更何况,这个初始值有可能在未来被去掉,那么,这时候岂不是还要去加上类型说明?

所以,我个人还是比较习惯声明变量的类型,不管有没有对其进行初始化。

以上只是个简单的例子,默认的一些代码风格,我个人都不是很习惯,所以,下面列举我的个人代码风格,供大伙借鉴、参考。

不多,只有几点而已,因为大多直接使用默认的代码风格,只是默认的一些风格中,我不是很习惯的情况下,才会对其进行修改。

命名方面

  • 私有属性和方法以 _ 一个下划线开头,并添加 private 修饰符
  • 公有属性和方法使用默认的不加修饰符
  • 与组件对应的模板 html 绑定事件相关的方法,以 on 为前缀
  • 组件的输出属性(@Output) 不以 on 为前缀
  • 表格数据的 *ngFor 指令时,建议以 item 命名每一项,如 *ngFor="let item of page?.result" 这样便于各个页面的代码直接复制粘贴

格式

  • HTML 中使用 "" 双引号,ts 中使用 ‘‘ 单引号
  • HTML 和 ts 的缩进都使用 4 个空格
  • 局部变量允许使用 let,并不一定强制使用 const
  • 所有变量声明时直接指明其类型

tslint.json

创建一个新的 Angular 项目时,会自动生成项目的脚手架,里面包括了各种各样的文件,其中有一份是 tslint.json 文件,是用来给 WebStorm 实时对代码进行 lint 检测时的代码风格配置。

我修改了部分默认的配置,下面给出的是所有项的配置,其中带有注释的配置项,就是我增加或修改原本默认的配置项,是基于我上面说的个人的一些习惯风格而进行的修改:

"rules": {
    "arrow-return-shorthand": true,
    "adjacent-overload-signatures": true, // override 函数是否集中放置 (新增)
    "callable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "deprecation": {
      "severity": "warn"
    },
    "eofline": false,  // 文件末尾是否需要空新行 (默认 true)
    "encoding": true,  // 文件编码是否默认 UTF-8 (新增)
    "forin": true,
    "import-blacklist": [
      true,
      "rxjs/Rx"
    ],
    "import-spacing": true,
    "indent": [
      true,
      "spaces"
    ],
    "interface-over-type-literal": true,
    "label-position": true,
    "max-line-length": [
      true,
      240 // 默认140,我屏幕挺大的,所以并不反感某一行代码过长,相反,很多代码因为自动换行后,我个人感觉更不习惯,还不如我手动来选择从某个地方换行
    ],
    "member-access": false,
    "member-ordering": [
      true,
      {
        "order": [
          "static-field",
          "instance-field",
          "static-method",
          "instance-method"
        ]
      }
    ],
    "no-arg": true,
    "no-bitwise": true,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-construct": true,
    "no-consecutive-blank-lines": [  // 空白行最多几行 (新增)
      true,
      3
    ],
    "no-debugger": false,
    "no-duplicate-super": true,
    "no-duplicate-switch-case": true, // 是否禁止重复 case (新增)
    "no-duplicate-imports": true,     // 是否禁止重复 import (新增)
    "no-duplicate-variable": [        // 是否禁止重复变量声明 (新增)
      true,
      "check-parameters"
    ],
    "no-conditional-assignment": true, // 禁止在分支条件判断中有赋值操作 (新增)
    "no-empty": false,
    "no-empty-interface": true,
    "no-eval": true,
    "no-inferrable-types": [  // 是否禁止在有初始值的变量声明上,增加类型声明 (默认 true)
      false,
      "ignore-params"
    ],
    "no-mergeable-namespace": true, // 是否禁止重复的命名空间 (新增)
    "no-misused-new": true,
    "no-non-null-assertion": true,
    "no-shadowed-variable": true,
    "no-string-literal": false,
    "no-string-throw": true,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": false,      // 是否禁止末尾空格 (默认 true)
    "no-unnecessary-initializer": true,
    "no-unused-expression": false,  // 是否允许无用的表达式存在 (默认 true)
    "no-unused-variable": false,   // 是否允许无用的变量存在 (新增)
    "no-use-before-declare": true,
    "no-unsafe-finally": true,
    "no-for-in-array": true,
    "no-var-keyword": true,
    "object-literal-sort-keys": false,
    "one-line": [
      true,
      "check-open-brace",
      "check-catch",
      "check-else",
      "check-whitespace"
    ],
    "prefer-const": false,  // 不强制使用 const,允许使用 let
    "quotemark": [  // 引号设置,ts 中单引号
      true,
      "single",
      "jsx-double",
      "avoid-escape",
      "avoid-template"
    ],
    "radix": true,
    "semicolon": [
      true,
      "always",
      "ignore-interfaces"
    ],
    "space-within-parens": [
      true,
      0
    ],
    "triple-equals": [
      true,
      "allow-null-check"
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "unified-signatures": true,
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
    "no-output-on-prefix": true,
    "use-input-property-decorator": true,
    "use-output-property-decorator": true,
    "use-host-property-decorator": true,
    "no-input-rename": true,
    "no-output-rename": true,
    "use-life-cycle-interface": true,
    "use-pipe-transform-interface": true,
    "component-class-suffix": true,
    "directive-class-suffix": true
  }

tslint.json 文件只是用来在执行 ng lint 命令,或者代码编程过程中,开发工具实时检测,当检测到不符合风格规范的代码时,进行报错处理。

虽然可以在执行 ng lint --fix 时添加 --fix 参数来自动修正一些风格错误,但这种方式很耗时,而是代码编写过程中,也没法应用。

所以,可以借助 Webstorm 的一些配置,一些小技巧,来进行代码的格式化操作,让开发工具自动帮我们将代码整理成符合规范的风格。

WebStorm 小技巧

下面介绍的这些配置项,都是为代码的格式化操作(快捷键:Ctrl + Alt + L)服务的,意思也就是说,当我们为当前文件进行代码格式化操作时,WebStorm 就会自动按照我们的这些配置项来自动整理代码,将代码整理成遵循规范的风格。

标点符号(引号,分号,逗号)

设置路径:Settings -> Editor -> Code Style -> TypeScript -> Punctuation

这里配置项很少,就三个,分别是配置分号,引号和逗号。

  • 第一行用来配置每行代码末尾是否需要有 ; 分号,且格式化时是否对旧代码(已经过格式化的代码)进行处理。
  • 第二行用来配置,代码中是使用 ‘‘ 单引号,还是 "" 双引号(默认是双引号),且格式化时是否对旧代码(已经过格式化的代码)进行处理。
  • 第三行用来配置是否需要保留,还是去掉数组或对象属性列表中,最后一项末尾的逗号。

我的代码风格是 HTML 中使用 "" 双引号,TypeScript 中使用 ‘‘ 单引号,但使用工具自动生成 ts 文件时,引号默认是双引号,或者某些时候某些因素下,代码中出现一些双引号,这时候,通过修改这个配置,在每次格式化代码时,就都会自动将双引号转成单引号,方便、高效。

空格

设置路径:Settings -> Editor -> Code Style -> TypeScript -> Spaces

格式化操作时,会自动在比如方法的 { 右括号前,赋值语句的 = 等号两侧等等这些位置自动加上一个空格,如果我们写代码时漏掉这些空格时。

这个功能其实是根据这里的配置项来决定的,这里面默认勾选了很多,基本符合常见的风格规范:

对于空格,我没有改掉默认格式化时空格风格,只是增加了几种场景也需要自动进行空格处理,分别是:

  • Within -> ES6 import/export braces

导入语句 {} 距离内容之间增加一个空格,默认是没有的,如:

  • Within -> Object literal braces 勾选
  • Within -> Object literal type braces 勾选

这两个是对象内部的空格处理,默认也是没有的,如:

对齐和换行

设置路径:Settings -> Editor -> Code Style -> TypeScript -> Wrapping and Braces

这里是设置一些对齐或者换行策略:

  • Chained method calls 设置为 Wrap always
  • Chained method calls -> Align when multiline 勾选
  • Chained method calls -> ‘:‘ on new line 勾选

上面三个是用来设置方法链时,代码的整理,默认不做处理,可以改成格式化时,自动将每层的方法调用进行换行,并且对齐处理,个人建议。

  • ‘if()‘ statement -> Force braces 设置为 always

这个是设置,即使 if 代码块内只有简单的一行代码,也要自动为其加上大括号处理,默认是不做处理。

  • Ternaty operation 设置为 Chop down if long
  • Ternaty operation -> Align when multiline 勾选
  • Ternaty operation -> ‘?‘ and ‘:‘ signs on next line 勾选

这个是用来设置 ? : 运算符的处理,上面的设置意思是,当代码过长时,自动将 ?: 的代码换行,并对其处理,默认是不做处理。

  • Array initializer 设置为 Chop down if long
  • Array initializer -> Align when multiline 勾选
  • Array initializer -> New line after ‘[‘ 勾选
  • Array initializer -> Place ‘]‘ on new line 勾选

这个是用来设置数组的处理,以上配置的意思是,当数组过长时,自动将每一项进行换行并对其处理,[] 单独占据一行:

[图片上传失败...(image-e2d886-1553268791353)]

对于 Angular 中的 @NgModel 的文件来说,经常会有这种风格需要,所以就直接这么配置了。

  • Objects -> Align 设置为 On Value
  • Variable declarations 设置为 Chop down if long
  • Variable declarations -> Align 设置为 when grouped

这个是用来设置变量或者对象的属性列表的赋值语句的对齐模式,如:

同理,也可以设置 CSS 的样式属性的对齐方式:

以上,只是我的个人风格习惯,大体上,我都直接按照默认的风格规范来遵守,但在个把一些项上,个人有不同的看法和习惯,所以修改掉了默认的风格配置。

另外,我比较习惯使用格式化代码操作,而且一个项目中,代码全是我自己写的可能性也很小,别人写的代码或多或少都存在一些风格规范问题,也没办法强制性要求他人必须遵守,所以,就瞎折腾了下 WebStorm 的相关配置。

这样,就方便我对别人的代码也直接通过格式化操作来自动进行风格规范处理。



大家好,我是 dasu,欢迎关注我的公众号(dasuAndroidTv),公众号中有我的联系方式,欢迎有事没事来唠嗑一下,如果你觉得本篇内容有帮助到你,可以转载但记得要关注,要标明原文哦,谢谢支持~

原文地址:https://www.cnblogs.com/dasusu/p/10582126.html

时间: 2024-09-27 12:10:16

Angular(03)-- lint风格规范和WebStorm小技巧的相关文章

一步一步学Python(1) 基本逻辑控制举例和编码风格规范

(1) 基本逻辑控制举例和编码风格规范 1.while死循环 2.for循环 3.if,elif,else分支判断 4.编码风格(官方建议) 版本:Python3.4 1.while死循环 >>> import time >>> i = 0 >>> while 1: ... i += 1 ... print(i) ... time.sleep(3) ... 1 2 3 ^CTraceback (most recent call last): File

[转] Python风格规范

Google 开源项目风格指南 Python风格规范 分号 Tip 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 Tip 每行不超过80个字符 例外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行. Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号. Yes: foo_bar(self, width, height, color='black', design=None, x=

Java编程风格规范(Google )

Google Java编程风格指南 前言 这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格. 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准.然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见. 1.1 术语说明 在本文档中,除非另有说明: 术语class可表示一个普通类,枚举类,接口或是anno

PHP PSR-2 代码风格规范 (中文版)

代码风格规范 本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合作时,就需要一个共同的编码规范,而本文中的风格规范源自于多个不同项目代码风格的共同特性,因此,本规范的价值在于我们都遵循这个编码风格,而不是在于它本身. 关键词 "必须"("MUST")."一定不可/一定不能"("MUST NOT"

PSR-2 编码风格规范

本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合作时,就需要一个共同的编码规范, 而本文中的风格规范源自于多个不同项目代码风格的共同特性, 因此,本规范的价值在于我们都遵循这个编码风格,而不是在于它本身. 关键词 "必须"("MUST")."一定不可/一定不能"("MUST NOT").&q

Python风格规范

Python风格规范 整理自Google开源项目指南 分号 不要在行尾加上分号,也不要用分号将两条命令分开: 行长度 每行长度不超过80个字符: 不要使用反斜杠连接行,可以使用圆括号来连接: # True x = ('This will build a very long long ' 'long long long long long long string') URL可以单独放一行,不需要分割: 括号 除非是实现行连接,否则不要在返回语句或者条件语句中使用括号: # wrong def fo

PSR-2 代码风格规范

这篇规范是PSR-1(基本代码规范)的扩展和继承. 本规通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 这个风格规范是从各种各样的项目的共性中延伸出来的.当多名程序员在多个项目中合作时,它有助于有一套准则,在所有的项目中使用. 因此,本指南的好处不是在规则本身,而是在这些规则的共享. 关键词 "必须"("MUST")."一定不可/一定不能"("MUST NOT")."

前端CSS和JS代码风格规范

1:不要轻易改动全站级CSS和通用CSS库.改动后,要经过全面测试. 2:css的id,class 名称 语义化,   以 - 相连,   命名少用缩写(除一些所有人一看便知的缩写); 3: Javascript命名规则 3.1:私有变量名用下划线开头; eg: _this = $(this); 3.2:变量名--驼峰命名法; eg: regEmail; 3.3:格式化对象参数;   eg: $.ajax({ type : 'post', url : '/auth/sendCode', data

《自拍教程》Python编程风格规范

Python编程风格规范 根据Python官方提供的Python编程风格规范: Style Guide for Python Code, 即PEP8规范, https://www.python.org/dev/peps/pep-0008/ 我通过学习并翻译总结, 总结了以下几条编程风格规范,各位同学可考虑自行参考. 良好的编程风格规范可以凸显代码编写者是否专业, 并提高其他代码阅读者的易读性. 我面试过很多测试求职候选人,做笔试题的时候. 一看代码命名规范,就知道正点不正点了, 是不是老手. 阅