32
The state of JavaScript Linting JS Syntax Überprüfung und Validierung

The state of JavaScript Linting - Deutsche Version

Embed Size (px)

DESCRIPTION

English version: http://de.slideshare.net/mischah/js-linting-en Untertitel: JS Syntax Überprüfung and Validierung Session vom 3. Kasseler Webmontag. Beantwortet die Frage »Was ist denn eigentlich dieses linting …« und stellt die Tools JSLint, JSHint und ESLint vor.

Citation preview

Page 1: The state of JavaScript Linting - Deutsche Version

The state of JavaScript Linting

JS Syntax Überprüfung und Validierung

Page 2: The state of JavaScript Linting - Deutsche Version

Michael Kühnel

- Macht Internet seit Netscape 4.7

- Ab April Frontend Developer bei Micromata

- Twitter: @mkuehnel

- Website: www.michael-kuehnel.de

Page 3: The state of JavaScript Linting - Deutsche Version

Historie

Die (subjektiv) »wichtigsten« Tools

- JSLint (Release 2002)*

- JSHint (Initial release 2010)

- ESLint (Initial release 2013)

*JSLint nur aus historischen Gründen in der Liste

Page 4: The state of JavaScript Linting - Deutsche Version

Gemeinsamkeiten

Oder was ist denn eigentlich dieses linting …

Page 5: The state of JavaScript Linting - Deutsche Version

1. Gleicher Zweck - Code Qualitätsprüfung

Syntax Checker und Validator (JavaScript und JSON)

Page 6: The state of JavaScript Linting - Deutsche Version

Code QualitätsprüfungSyntaxfehler die spätestens im Browser knallen würden z.B.

- letztes Komma bei Object literals

- Fehlende oder unnötige Semikolons

- Fehlen von schließenden Klammern

- Tippfehler jeglicher Art

Page 7: The state of JavaScript Linting - Deutsche Version

Code QualitätsprüfungVermeidung von logischen Fehlern / Strukturellen Problemen ➡️ Erhöhung der Maintainability z.B.

- Detection von unreachable Code

- Versehentliche globale Variable

- Nicht verwendete Parameter

- usw.

Page 8: The state of JavaScript Linting - Deutsche Version

Code QualitätsprüfungForcierung der Einhaltung von Coding Conventions z.B.

- Einrückung

- Schreibweise von Konstruktoren

- Verwendung von eval()

- usw.

Page 9: The state of JavaScript Linting - Deutsche Version

2. Gleiche Funktionsweise

A. Findet Fehler

B. Beschreibt das Problem

C. nennt die Stelle im Quellcode (Zeilennummer)

Page 10: The state of JavaScript Linting - Deutsche Version

3. Gleiche Sprache – gleiche Umgebungen

- In JavaScript geschrieben:

- Browser

- node.js / Rhino

- JS basierte Build tools (Grunt, gulp etc.)

- Editor Plugins

Page 11: The state of JavaScript Linting - Deutsche Version

4. Sorgen nicht für fehlerfreien Code

Minimieren aber die Fehlerquellen durch Einsatz an sinnvoller Stelle im Workflow:

- beim Speichern

- als pre-commit hook

- Im Build Process

Page 12: The state of JavaScript Linting - Deutsche Version

Es gibt keinen fehlerfreien Code 😎

Zusätzlich empfehlenswert für Code-Qualität im Team:

- Unit-Tests

- Funktionale Test

- Code Reviews

Page 13: The state of JavaScript Linting - Deutsche Version

JSLint (will hurt your feelings)

Initial release 2002

Page 14: The state of JavaScript Linting - Deutsche Version

JSLint- Autor: JavaScript Guru Douglas Crockford

(»Erfinder von JSON«, Entwickler von JSMin)

- Zitat von Crockford: »JavaScript is a sloppy language, but inside it there is an elegant, better language.«

- Intention: Enforcing der »Good Parts« von JavaScript

- http://jslint.com

Page 15: The state of JavaScript Linting - Deutsche Version

JSHint (The »Gentler« JavaScript

Code Quality Tool)Initial release 2010

Page 16: The state of JavaScript Linting - Deutsche Version

JSHint

- Autor: Anton Kovalyov

- Intention: Flexibleres Linting Tool

- http://jshint.com

Page 17: The state of JavaScript Linting - Deutsche Version

Hauptunterschiede zu JSLint:

- Community Driven (133 contributors)

- Testabdeckung des Quellcodes (Unit-Tests)

- Weniger opinionated (http://anton.kovalyov.net/p/why-jshint)

- Mehr Optionen (ein- und ausschaltbar)

- ECMAScript 6 support

- Konfiguration über JavaScript Kommentare oder Text-Dateien (Empfehlung .jshintrc -> Arbeiten im Team + »Vererbung«)

JSHint ≠ JSLint

Page 18: The state of JavaScript Linting - Deutsche Version

- Enforcing Options - für strikteren Code

- z.B. 'maxparams' Definition der maximalen Anzahl an Parametern pro Funktion

- Relaxing Options - für tolerantere Überprüfung

- z.B. 'loopfunc' - Unterdrückt Warnungen bei Definition von Funktionen innerhalb von Schleifen.

- Environment options - pre-defined globale Variablen für spezifische Umgebungen

- z.B. 'jquery' - Vermeidet Warnung bei der Verwendung von '$' und 'jQuery'.

JSHint - Überblick der Optionen

Page 19: The state of JavaScript Linting - Deutsche Version

Verfügbar als:

- Plugin für etliche Editoren

- Task für Grunt/gulp

- usw. Siehe Auszug auf http://jshint.com/install

- zum Ausprobieren auf der Website von JSHint

JSHint für alle

Page 20: The state of JavaScript Linting - Deutsche Version

Pläne für den nächsten Major Release (3.0)

- Entfernung aller »style-related« Optionen und Warnungen.

- Zitat: »Falls es Sinn macht sollten sie in optionale Plugins überführt werden.«

- Plugin-System für Erweiterungen

Siehe http://www.jshint.com/blog/jshint-3-plans/

JSHint - Die Zukunft

Page 21: The state of JavaScript Linting - Deutsche Version

JSHint - Die Zukunft- Ursache für »neue« Linting Tools wie:

- node-jscs (JavaScript Code Style checker)

- https://twitter.com/mikesherov/status/419596672520318976

- https://github.com/mdevils/node-jscs

- ESLint

- http://eslint.org

Page 22: The state of JavaScript Linting - Deutsche Version

ESLint(The pluggable linting utility

for JavaScript)Initial release 2013

Page 23: The state of JavaScript Linting - Deutsche Version

ESLint- Creator: Nicholas C. Zakas

- Intention:

- Noch flexibleres/ erweiterbares Linting Tool.

- Zunächst kompatibel zu JSHint - Sachen Regeln

- http://eslint.org

Page 24: The state of JavaScript Linting - Deutsche Version

ESLint ≠ JSHintHauptunterschiede zu JSHint:

- Eine API für das einfache erstellen neuer Regeln (Plugin-System)

- Jede Regel ist ein Plugin (auch die mitgelieferten)

- Jede Regel ist abschaltbar!

- Noch mehr Regeln als JSHint

- Jede Regel kann je nach Bedarf Fehler oder Warnungen produzieren

- Config files im JSON Format oder YAML (weniger Schreibarbeit)

- »Schönere« Ausgabe im Terminal 😘

Page 25: The state of JavaScript Linting - Deutsche Version

ESLint - Optionen für Konfiguration

- Environments

- Laufzeitumgebung (Browser/Node/Rhino).

- Jede Umgebung definiert ein Set an globalen Variablen und Regeln die per Default aktiviert sind.

- Globals

- Weitere selbst definierte globale Variablen

- Rules

- Welche regeln sind aktiviert und welcher Fehler-Level ist definiert.

Page 26: The state of JavaScript Linting - Deutsche Version

ESLint - Überblick der Regeln

1. Possible Errors:

- Mögliche Fehler im Code

- z.B. 'no-dupe-keys' – Hinweis auf doppelte Keys bei Object literals

2. Best Practices:

- Hinweise auf Code-Fragemente die man lieber anders schreiben sollte.

- z.B. 'wrap-iife' – Hinweis darauf, dass man sich selbst aufrufende Funktionen mit Klammern umschließen sollte.

3. Strict Mode:

- Regeln die den Strict Mode betreffen (ECMAScript5)

- z.B. 'no-extra-strict' – Warnung bei Verwendung von "use strict" wenn bereits in strict mode.

Page 27: The state of JavaScript Linting - Deutsche Version

ESLint - Überblick der Regeln

4. Variables:

- Regeln die mit der Deklaration von Variablen zu tun haben

- z.B. 'no-shadow' – Warnung bei Deklaration von Variablennamen die bereits in einem äußeren Scope verwendet werden.

5. Node.js:

- Node.js spezifische Regeln

- z.B. 'no-process-exit' Warnung bei Verwendung von process.exit()

6. Stylistic Issues:

- Regeln die »nur« coding Style betreffen

- z.B. 'no-new-object' - Warnung bei Verwendung des Object Constructors: new Object()

Page 28: The state of JavaScript Linting - Deutsche Version

FazitESLint – The way to go 🔥 – trotz frühem Entwicklungsstand (0.4.2)

- Größtes Set an Regeln die am flexibelsten zu konfigurieren sind

- Zukunftssicher in Sachen »Style related Warnings«

- Pluggability (z.b. für firmeninterne Regeln zur Einhaltung von Coding Guidelines)

- Vermutlich schon bald die größte Entwicklergemeinde hinter dem Projekt

- Neben Grunt auch für exotischer JS-Build Tools wie Broccoli als Module erhältlich ; ] Siehe http://eslint.org/docs/integrations

Page 29: The state of JavaScript Linting - Deutsche Version

Fragen?!Twitter: @mkuehnel E-Mail: [email protected]

💭

Page 30: The state of JavaScript Linting - Deutsche Version

Links I- JavaScript: The Good Parts:

- http://www.amazon.de/JavaScript-Parts-Working-Shallow-Grain/dp/0596517742

- JSLint:

- http://jslint.com

- https://github.com/douglascrockford/JSLint

Page 31: The state of JavaScript Linting - Deutsche Version

Links II- JSHint

- http://anton.kovalyov.net/p/why-jshint

- http://jshint.com

- http://jshint.com/docs/options

- https://github.com/jshint/jshint

- http://jshint.com/install

- https://github.com/sindresorhus/jshint-stylish

- https://twitter.com/jshint

Page 32: The state of JavaScript Linting - Deutsche Version

Links III- ESLint

- http://eslint.org

- https://github.com/eslint/eslint

- https://twitter.com/geteslint

- http://eslint.org/docs/configuring

- http://eslint.org/docs/rules/

- http://eslint.org/docs/integrations