TsLint – utrzymywanie kodu w jednym stylu i zapobieganie bólowi głowy
TsLint to TypeScriptowa wersja JsLinta…
Linty to programy które sprawdzają twój kod pod względem:
- Czytelności
- Łatwość utrzymania
- Błędy funkcjonalne
TsLint w projekcie TheShipGame jest uruchamiany przez WebPacka:
{
test: /\.tsx?$/,
enforce: "pre",
loader: 'tslint-loader'
}
test
oznacza, że jest dopasowany do rozszerzeń .ts
oraz .tsx
. .ts
to rozszerzenie standardowe dla TypeScript, natomiast .tsx
oznacza podobnie do .jsx
pliki korzystające z rozszerzonej składni używanej np. przez bibliotekę React.
enforce: "pre"
oznacza loadera, który wykonuje się przed innymi. W WebPacku 1.0 preloadery oznaczało się w osobnej sekcji preLoaders:([])
. Od WebPacka 2.0 wszystkie loadery znajdują się w jednej tablicy, te które mają się wykonać wcześniej są oznaczone wspomnianym enforce: "pre"
, natomiast te które mają się wykonać później oznaczane, są enforce: "post"
.
loader
oznacza plugin-programik, który wykonuje całą brudną robotę. Instalacja takiego pluginu nie może być łatwiejsza.
npm install tslint-loader --save-dev
Przypomnę, że --save-dev
zapisuje informacje o pakiecie w pliku package.json
, to pomocne, gdy chcemy odtworzyć nasze środowisko programistyczne na innym komputerze. Wtedy wykonanie komendy npm install
spowoduje odczyt listy pakietów z pliku package.json
, ściągnięcie ich do katalogu node_modules
.
TsLint sprawdza nasz kod na podstawie reguł – rules
. Zawartych w pliku tslint.json
w katalogu głównym naszego projektu.
Mój plik tslint.json
składa się z dwóch głównych części
rulesDirectory
wskazuje tam katalogi w których zdefiniowane, są reguły wykorzystane w drugiej części – "rules"
.
Zbiory reguł można dodać do swojego projektu poprzez:
npm install tslint-eslint-rules --save-dev
npm install tslint-microsoft-contrib --save-dev
To jakie i jak mocno chcemy się ich trzymać zależy tylko od nas. Ciekawe konfiguracje plików tslint.json
można GitHubie.
Microsoft ma swoje rekomendacje, których się mocno nie trzyma w innym swoim projekcie jakim jest TypeScript 🙂
Reguły dotyczą wszystkiego (moje ulubione):
- Wymuszenie PascalCase dla nazw klas:
"class-name": true
- Zakaz używania console:
"no-console": [true, "debug", "info", "log", "time", "timeEnd", "trace"]
- Wymuszenie używania średników:
"semicolon": [true, "always"]
- Zakaz używania
null
a (niech żyjeundefined
!):"no-null":true
- Wymuszenie używania pojedynczych stringów
'string'
:"quotemark": [true, "single"]