Eslint rules for polygerrit
This directory contains custom eslint rules for polygerrit.
ts-imports-js
This rule must be used only for .ts files.
The rule ensures that:
- All import paths either a relative paths or module imports.
// Correct imports
import './file1'; // relative path
import '../abc/file2'; // relative path
import 'module_name/xyz'; // import from the module_name
// Incorrect imports
import '/usr/home/file3'; // absolute path
- All relative import paths has a short form (i.e. don't include extension):
// Correct imports
import './file1'; // relative path without extension
import data from 'module_name/file2.json'; // file in a module, can be anything
// Incorrect imports
import './file1.js'; // relative path with extension
- Imported
.jsand.d.tsfiles both exists (only for a relative import path):
Example:
polygerrit-ui/app
|- ex.ts
|- abc
|- correct_ts.ts
|- correct_js.js
|- correct_js.d.ts
|- incorrect_1.js
|- incorrect_2.d.ts
// The ex.ts file:
// Correct imports
import {x} from './abc/correct_js'; // correct_js.js and correct_js.d.ts exist
import {x} from './abc/correct_ts'; // import from .ts - d.ts is not required
// Incorrect imports
import {x} from './abc/incorrect_1'; // incorrect_1.d.ts doesn't exist
import {x} from './abc/incorrect_2'; // incorrect_2.js doesn't exist
To fix the last two imports 2 files must be added: incorrect_1.d.ts and
incorrect_2.js.
goog-module-id
Enforce correct usage of goog.declareModuleId:
- The goog.declareModuleId must be used only in
.jsfiles which have associated.d.tsfiles. - The module name is correct. The correct module name is constructed from the
file path using the folowing rules
rules:
- Get part of the path after the '/polygerrit-ui/app/':
/usr/home/gerrit/polygerrit-ui/app/elements/shared/x/y.js->elements/shared/x/y.js - Discard
.jsextension and replace all/with.:elements/shared/x/y.js->elements.shared.x.y - Add
polygerrit.prefix:elements.shared.x.y->polygerrit.elements.shared.x.yThe last string is a module name.
- Get part of the path after the '/polygerrit-ui/app/':
Example:
// polygerrit-ui/app/elements/shared/x/y.js
goog.declareModuleId('polygerrit.elements.shared.x.y');