前言
Dart語言在統一程式碼規範這方面做的還是比較完善的,不僅有官方文件 effective-dart 指導我們寫出優雅的dart程式碼,更是提供了像eslint(寫過js/ts的應該都知道)一樣的工具linter來檢查我們的程式碼是否符合規範。當然,檢查項是可以配置的,這個後面再說,我們先來介紹如何使用官方提供的工具。
使用工具檢查程式碼規範
首先,我們需要在專案的根目錄下新增analysis_options.yaml檔案,再次確認下這個檔案應該跟pubspec.yaml在同一級目錄下(不要嫌囉嗦)。檔案新增好了,那應該怎麼寫配置的內容呢?這裡有三個預設可供選擇:
- pedantic : Google內部執行的規則
- effective_dart : 與effective-dart 指南相對應的規則
- flutter : flutter analyze中使用的規則
我們以pendantic為例,首先在pubspec.yaml檔案的dev_dependencies下新增pendantic庫,接著執行pub get將該庫載入到專案中。
dev_dependencies:
pedantic: ^1.9.0
複製程式碼
然後我們在analysis_options.yaml檔案中新增如下配置:
include: package:pedantic/analysis_options.yaml
當然也可以像下面這樣寫,指定具體的options版本號:
include: package:pedantic/analysis_options.1.9.0.yaml
通過檢視pedantic庫的程式碼結構也能夠看出analysis_options.yaml裡一直是引用最新的預設檔案。
第一種引用option的方式可能會在庫更新的時候帶來新版本的option檔案,這樣的話有可能會帶來新的錯誤警告資訊,而第二種引用指定版本option的方式會比較的穩定,這個大家選擇合適自己的就好(星座決定選擇,手動滑稽一下)。
配置好analysis_options檔案後我們就可以在Android Studio的Dart Analysis下看到提示了,滑鼠點選具體條目可以跳轉到具體程式碼進行修改調整。(VS Code應該會在PROBLEMS下面看到相應的提示)
配置analysis_options.yaml檔案
include: package:pedantic/analysis_options.1.9.0.yaml
analyzer:
exclude: [build/**]
strong-mode:
implicit-casts: false
linter:
rules:
- camel_case_types
複製程式碼
- include : 指定引用第三方庫中預設檔案的路徑
- analyzer : 配置static analysis的條目,包括啟用更嚴格的型別檢查,排除檔案,忽略特定規則,更改規則的嚴重程度等。
- linter : 配置linter規則
需要注意:不要在YAML檔案中使用製表符,而是要用2個空格來表示每個縮排級別。
啟用更嚴格的型別檢查
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
複製程式碼
我們可以使用implicit-casts和implicit-dynamic這兩個配置項來啟用更嚴格的型別檢查,他們的預設值都為true,可以組合使用,也可以分開使用。
- implicit-casts的值為false時,可以確保型別推斷引擎不會隱式轉換成具體的資料型別。
- implicit-dynamic的值為false時, 可以確保型別推斷引擎在無法確定具體的資料型別時不會轉換成動態型別。
這個大家可以設定一下試試,99%的人應該會收穫一堆錯誤,然後開始懷疑自己寫的是什麼粑粑。。。。
定製自己的linter規則
linter:
rules:
- annotate_overrides
- await_only_futures
- camel_case_types
- cancel_subscriptions
複製程式碼
按照上面的格式,可以根據實際需要新增自己的linter規則, dart-lang.github.io/linter/lint… 這裡可以檢視所有的linter規則,下面標註的標籤會很清楚的標註每條規則的所在以及類別(例如:style)
但是如果你要禁用前面通過include引入的linter規則,則需要下面的配置格式
include: package:pedantic/analysis_options.1.9.0.yaml
linter:
rules:
avoid_shadowing_type_parameters: false
await_only_futures: true
複製程式碼
當然也可以啟用新的規則。這裡需要注意的是,以上兩種配置linter的方式不能混用。
排除檔案
有些時候我們需要排除一些檔案,比如json_serializable庫生成的.g.dart檔案,這時候就需要配置exclude,可以指定具體檔案,也可以指定一類檔案或者這個資料夾下的所有檔案,所以說這個還是比較靈活的。
analyzer:
exclude:
- lib/http_client.dart
- lib/models/*.g.dart
- lib/mock/**
複製程式碼
忽略特定規則
我們可以忽略指定的linter規則,配置樣式如下:
analyzer:
errors:
todo: ignore
複製程式碼
更改規則的嚴重程度
我們也可以全域性更改指定規則的嚴重程度,配置樣式如下:
analyzer:
errors:
invalid_assignment: warning
missing_return: error
dead_code: info
複製程式碼
IDE的提示修復功能
不管是VS Code 還是Android Studio,提示錯誤的同時一般都會帶著修復提示的。
滑鼠點點就能搞定大部分的警告,strong-mode開啟的話另說,不是很強迫症的話可以忽略這個選項。
結束語
既然dart自帶的程式碼規範功能這麼強大,我們也不能浪費了google工程師們的一片良苦用心。簡單的設定一下就可以讓程式碼規範很多,趕快動手試試吧。
感謝大家
1.如果本文對你有幫助,就點個贊支援下吧,你的「贊」是我創作的動力。
2.關注公眾號「碼農碼未來」讓我們一起進步,碼出自己絢麗多彩的未來。