Angular(03)-- lint風格規範和WebStorm小技巧

在開始講 Angular 各個核心知識點以前,想先來說講開發工具 WebStorm 的一些配置以及相應配置文件如 tslint.json 的配置。html

由於我我的比較注重代碼規範、代碼風格,而對於這些規範,我只有一個觀點:一切須要依賴開發人員的主觀意識去遵照的規範都沒有多大意義。前端

之前作 Android 開發時會藉助 AndroidStudio 來強制遵照一些規範,如今前端項目我用的是 WebStorm 開發,這兩個開發工具本質上同源,因此不少功能都差很少。web

那麼,這篇就來說一講,如何對 WebStorm 進行一些設置,讓它能夠更好的輔助咱們遵照風格規範,同時,理清一些好比 tslint.json 的配置,來讓開發工具實時檢測咱們寫的代碼是否有很好的遵照規範。express

風格規範

Angular 項目的不少文件都是經過 Angular-CLI 工具的 ng 命令來生成的,生成時就有默認一些代碼風格,並且,WebStorm 默認也有一些代碼風格,也許有人以爲直接使用默認的風格來便可。編程

但對於默認的一些風格規範,我不是很贊同,好比說:json

name: string = 'dasu'數組

簡單的在某個類中聲明這麼一個 name 變量,類型是 string,初始值爲 dasu,但默認的 tslint.json 配置的代碼風格會報錯,由於它建議咱們,既然已經初始化爲字符串類型了,就沒有必要再去聲明變量的類型了。app

對於這種默認風格,我我的並不贊同,由於我的習慣了 Java 的風格,對於變量的類型聲明已經習慣了,更況且,這個初始值有可能在將來被去掉,那麼,這時候豈不是還要去加上類型說明?curl

因此,我我的仍是比較習慣聲明變量的類型,無論有沒有對其進行初始化。webstorm

以上只是個簡單的例子,默認的一些代碼風格,我我的都不是很習慣,因此,下面列舉個人我的代碼風格,供大夥借鑑、參考。

很少,只有幾點而已,由於大多直接使用默認的代碼風格,只是默認的一些風格中,我不是很習慣的狀況下,纔會對其進行修改。

命名方面

  • 私有屬性和方法以 _ 一個下劃線開頭,並添加 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),公衆號中有個人聯繫方式,歡迎有事沒事來嘮嗑一下,若是你以爲本篇內容有幫助到你,能夠轉載但記得要關注,要標明原文哦,謝謝支持~
dasuAndroidTv2.png

相關文章
相關標籤/搜索