npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@villedemontreal/lint-config

v1.7.7

Published

TSLint and Prettier config files for multiple project types

Downloads

1,459

Readme

Lint Config - Ville de Montréal

A TSLint config based on Airbnb JavaScript Style Guide that is compatible with Prettier.

Goal

This package provides standard configurations for TSLint and Prettier that must be used by all TypeScript projects created for the city of Montreal.

The configured rules strive to be as close as possible to the Airbnb JavaScript Style Guide, as well as a couple of additional rules based on TypeScript recommended rules. In order to minimize any disagreements in the choice of the configured rules, which can become subjective, teams should refer the these guides before pushing for a change. Individual projects should refrain from overriding rules, all changes should be applied directly to this project.

Installation

Add the current project to your project's dev dependency.

npm install -D @villedemontreal/lint-config

If you use VS Code, you should install the following extensions in order to see the rules and simplify the formatting of your files:

Integration for other editors is also available. For more details, please refer to the TSLint and Prettier documentation.

Usage for Angular

In $project-root/tslint.json:

{
  "extends": "@villedemontreal/lint-config/rules/tslint-angular"
}

In $project-root/prettier.config.js:

module.exports = require('@villedemontreal/lint-config/rules/prettier.config');

In $project-root/tsconfig.json (Note that you can add extra options, when required):

{
  "extends": "./node_modules/@villedemontreal/lint-config/rules/tsconfig-base.json",
  "compilerOptions": {
    "sourceMap": true,
    "pretty": true,
    "experimentalDecorators": true,
    "skipLibCheck": true
  }
}

Usage for Node.js

Node.js

In $project-root/tslint.json:

{
  "extends": "@villedemontreal/lint-config/rules/tslint-node"
}

In $project-root/prettier.config.js:

module.exports = require('@villedemontreal/lint-config/rules/prettier.config');

In $project-root/tsconfig.json (Note that you can add extra options, if required!):

{
  "extends": "./node_modules/@villedemontreal/lint-config/rules/tsconfig-base.json",
  "compilerOptions": {
    "sourceMap": true,
    "pretty": true,
    "experimentalDecorators": true,
    "skipLibCheck": true
  }
}

The Check/Fix script

When the @villedemontreal/lint-config dependency is installed in your project, you gain access to a script that can validate and fix linting. This script will be available at $project-root/node_modules/.bin/villemontreal-lint.

Note that TSLint fixing won't work for some rules that can only be fixed manually (the "cyclomatic-complexity" rule, for example).

Script help

To display the help for the script, run at the root of your project:

linux/mac: node_modules/.bin/villemontreal-lint --help
windows: node_modules\.bin\villemontreal-lint --help

Script parameters

The lint script accept those parameters, when executing using command line :

node_modules/.bin/villemontreal-lint [projectRoot] [action] [projectType] [validationType]

None of those parameters is mandatory, they all have a default value.

  • projectRoot : The relative or absolute path to the root of the project to lint. Defaults to the current directory.
  • action : The action to perform. Can be "check" or "fix". Defaults to "check".
  • projectType : The type of the target project. Can be "angular", "node" or "auto". If "auto" is used the script will try to detect the project type automatically. If not specified, "auto" is used.
  • validationType : The type of validation. Can be "prettier", "tslint" or "both". If not specified, "both" is used.

Command line examples

To check the current project, from its root :

linux/mac: node_modules/.bin/villemontreal-lint
windows: node_modules\.bin\villemontreal-lint

To fix the current project, from its root :

linux/mac: node_modules/.bin/villemontreal-lint . fix
windows: node_modules\.bin\villemontreal-lint . fix

Fix the formatting only using the Prettier rules, on a Node project :

linux/mac: node_modules/.bin/villemontreal-lint /someDir/myNodeProject fix node prettier
windows: node_modules\.bin\villemontreal-lint C:\someDir\myNodeProject fix node prettier

The Check/Fix functions

The "@villedemontreal/lint-config" dependency also exports functions that can be used to check and fix a project programatically :

  • prettierCheck(...)
  • prettierFix(...)
  • tslintCheck(...)
  • tslintFix(...)

Rules Exceptions

A few exceptions to the default configurations were introduced in order to make it easier to work with lint-config-villemontreal.

  • "array-type": [true, "array"] As a workaround for https://github.com/palantir/tslint/issues/2946

  • "no-increment-decrement": false Allows ++ in for loops. An issue already exist on GitHub.

  • "no-switch-case-fall-through": true Fall through in switch statements is often unintentional and a bug.

  • "no-var-requires": false Allows for libraries without type definitions.

  • "object-literal-sort-keys": false Alphabetical ordering is not always appropriate in object literal.

  • "object-shorthand-properties-first": false Similarly to the previous rule, disabling this one allows ordering the keys of an object literal in a logical order, when required.

  • "strict-boolean-expressions": false Allows statement such as if(!myObjectThatCanBeNullOrUndefined) { /_ do something _/ }

  • "variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"] Adds ban-keywords to the Airbnb convention. Allows for leading underscore in naming class variables for private variables. Otherwise, it would be impossible to have a public property wrapping a private variable of the same name.

  • "no-floating-promises": true Helps in preventing missing "await" keywords.

  • "member-ordering": [true, {"order": ["static-field", "static-method", "instance-field", "constructor", "instance-method"]}] After a discussion about this rule, we decided to make it more permissive than the default (from "tslint recommended"). The main reason being that it sometimes makes sense to group functions of different visibilities together.

Exclude generated files

You can add a folder named generated at the root of your project. Any files in this folder will be ignored by Prettier, TSlint and the TS transpiler.

The intent of this folder is to put files that has been generated by a third-party tool such as Swagger codegen and that you should not modify manually.

Builder le projet

Note: Sur Linux/Mac assurz-vous que le fichier run est exécutable. Autrement, lancez chmod +x ./run.

Pour lancer le build :

  • run compile ou ./run compile (sur Linux/Mac)

Pour lancer les tests :

  • run test ou ./run test (sur Linux/Mac)

Mode Watch

Lors du développement, il est possible de lancer run watch (ou ./run watch sur Linux/mac) dans un terminal externe pour démarrer la compilation incrémentale. Il est alors possible de lancer certaines launch configuration comme Debug current tests file - fast dans VsCode et ainsi déboguer le fichier de tests présentement ouvert sans avoir à (re)compiler au préalable (la compilation incrémentale s'en sera chargé).

Notez que, par défaut, des notifications desktop sont activées pour indiquer visuellement si la compilation incrémentale est un succès ou si une erreur a été trouvée. Vous pouvez désactiver ces notifications en utilisant run watch --dn (disable notifications).

Déboguer le projet

Trois "launch configurations" sont founies pour déboguer le projet dans VSCode :

  • "Debug all tests", la launch configuration par défaut. Lance les tests en mode debug. Vous pouvez mettre des breakpoints et ils seront respectés.

  • "Debug a test file". Lance un fichier de tests en mode debug. Vous pouvez mettre des breakpoints et ils seront respectés. Pour changer le fichier de tests à être exécuté, vous devez modifier la ligne appropriée dans le fichier ".vscode/launch.json".

  • "Debug current tests file". Lance le fichier de tests présentement ouvert dans VSCode en mode debug. Effectue la compîlation au préalable.

  • "Debug current tests file - fast". Lance le fichier de tests présentement ouvert dans VSCode en mode debug. Aucune compilation n'est effectuée au préalable. Cette launch configuration doit être utilisée lorsque la compilation incrémentale roule (voir la section "Mode Watch" plus haut)

  • "Debug a Script", permet de déboguer un script custom à la librairie. Vous pouvez mettre des breakpoints et ils seront respectés. Il faut modifier les informations dans .vscode/launch pour spécifier le script à déboguer.

Notes sur la dépendance "@villemontreal/core-utils-scripting-core-nodejs-lib"

Pour éviter d'avoir une hiérarchie trop profonde dans node_modules, nous incluons la librarie de scripting "@villemontreal/core-utils-scripting-core-nodejs-lib" en spécifiant uniquement sa version majeure (par exemple: "^1" ou "^2"). La raison est que cette librairie de scripting, ainsi que la librairie présente, s'utilisent chacune mutuellement. En spécifiant uniquement la version majeure de la librairie de scripting, seul le plus récent artifact à cette version majeure sera ajouté ici au node_modules.

Note: Il faut aussi s'assurer dans la librairie de ne pas provoquer de dépendances circulaires en important des composants de la librairie de scripting qui eux-mêmes importeraient en ce faisant des composants de la librairie présente! C'est pour cette raison que tous les scripts core reliés au lintage et définis dans la librairie de scripting sont remplacés ici! D'hériter de la classe ScriptBase est sans problème car cet import ne génère aucune dépendance circulaire.

Aide / Contributions

Notez que les contributions sous forme de pull requests sont bienvenues.