mirror of https://github.com/espruino/BangleApps
251 lines
7.8 KiB
JavaScript
251 lines
7.8 KiB
JavaScript
const lintExemptions = require("./apps/lint_exemptions.js");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
function findGeneratedJS(roots) {
|
|
function* listFiles(dir, allow) {
|
|
for (const f of fs.readdirSync(dir)) {
|
|
const filepath = path.join(dir, f);
|
|
const stat = fs.statSync(filepath);
|
|
|
|
if (stat.isDirectory()) {
|
|
yield* listFiles(filepath, allow);
|
|
} else if(allow(filepath)) {
|
|
yield filepath;
|
|
}
|
|
}
|
|
}
|
|
|
|
return roots.flatMap(root =>
|
|
[...listFiles(root, f => f.endsWith(".ts"))]
|
|
.map(f => f.replace(/\.ts$/, ".js"))
|
|
);
|
|
}
|
|
|
|
module.exports = {
|
|
"env": {
|
|
// TODO: "espruino": false
|
|
// TODO: "banglejs": false
|
|
// For a prototype of the above, see https://github.com/espruino/BangleApps/pull/3237
|
|
},
|
|
"extends": "eslint:recommended",
|
|
"globals": {
|
|
// Methods and Fields at https://banglejs.com/reference
|
|
"Array": "readonly",
|
|
"ArrayBuffer": "readonly",
|
|
"ArrayBufferView": "readonly",
|
|
"Bangle": "readonly",
|
|
"BluetoothDevice": "readonly",
|
|
"BluetoothRemoteGATTCharacteristic": "readonly",
|
|
"BluetoothRemoteGATTServer": "readonly",
|
|
"BluetoothRemoteGATTService": "readonly",
|
|
"Boolean": "readonly",
|
|
"console": "readonly",
|
|
"DataView": "readonly",
|
|
"Date": "readonly",
|
|
"E": "readonly",
|
|
"Error": "readonly",
|
|
"Flash": "readonly",
|
|
"Float32Array": "readonly",
|
|
"Float64Array": "readonly",
|
|
"Function": "readonly",
|
|
"Graphics": "readonly",
|
|
"I2C": "readonly",
|
|
"Int16Array": "readonly",
|
|
"Int32Array": "readonly",
|
|
"Int8Array": "readonly",
|
|
"InternalError": "readonly",
|
|
"JSON": "readonly",
|
|
"Math": "readonly",
|
|
"Modules": "readonly",
|
|
"NRF": "readonly",
|
|
"Number": "readonly",
|
|
"Object": "readonly",
|
|
"OneWire": "readonly",
|
|
"Pin": "readonly",
|
|
"process": "readonly",
|
|
"Promise": "readonly",
|
|
"ReferenceError": "readonly",
|
|
"RegExp": "readonly",
|
|
"Serial": "readonly",
|
|
"SPI": "readonly",
|
|
"StorageFile": "readonly",
|
|
"String": "readonly",
|
|
"SyntaxError": "readonly",
|
|
"TFMicroInterpreter": "readonly",
|
|
"TypeError": "readonly",
|
|
"Uint16Array": "readonly",
|
|
"Uint24Array": "readonly",
|
|
"Uint32Array": "readonly",
|
|
"Uint8Array": "readonly",
|
|
"Uint8ClampedArray": "readonly",
|
|
"Unistroke": "readonly",
|
|
"Waveform": "readonly",
|
|
// Methods and Fields at https://banglejs.com/reference
|
|
"__FILE__": "readonly",
|
|
"analogRead": "readonly",
|
|
"analogWrite": "readonly",
|
|
"arguments": "readonly",
|
|
"atob": "readonly",
|
|
"Bluetooth": "readonly",
|
|
"BTN": "readonly",
|
|
"BTN1": "readonly",
|
|
"BTN2": "readonly",
|
|
"BTN3": "readonly",
|
|
"BTN4": "readonly",
|
|
"BTN5": "readonly",
|
|
"btoa": "readonly",
|
|
"changeInterval": "readonly",
|
|
"clearInterval": "readonly",
|
|
"clearTimeout": "readonly",
|
|
"clearWatch": "readonly",
|
|
"decodeURIComponent": "readonly",
|
|
"digitalPulse": "readonly",
|
|
"digitalRead": "readonly",
|
|
"digitalWrite": "readonly",
|
|
"dump": "readonly",
|
|
"echo": "readonly",
|
|
"edit": "readonly",
|
|
"encodeURIComponent": "readonly",
|
|
"eval": "readonly",
|
|
"getPinMode": "readonly",
|
|
"getSerial": "readonly",
|
|
"getTime": "readonly",
|
|
"global": "readonly",
|
|
"globalThis": "readonly",
|
|
"HIGH": "readonly",
|
|
"I2C1": "readonly",
|
|
"Infinity": "readonly",
|
|
"isFinite": "readonly",
|
|
"isNaN": "readonly",
|
|
"LED": "readonly",
|
|
"LED1": "readonly",
|
|
"LED2": "readonly",
|
|
"load": "readonly",
|
|
"LoopbackA": "readonly",
|
|
"LoopbackB": "readonly",
|
|
"LOW": "readonly",
|
|
"NaN": "readonly",
|
|
"parseFloat": "readonly",
|
|
"parseInt": "readonly",
|
|
"peek16": "readonly",
|
|
"peek32": "readonly",
|
|
"peek8": "readonly",
|
|
"pinMode": "readonly",
|
|
"poke16": "readonly",
|
|
"poke32": "readonly",
|
|
"poke8": "readonly",
|
|
"print": "readonly",
|
|
"require": "readonly",
|
|
"reset": "readonly",
|
|
"save": "readonly",
|
|
"Serial1": "readonly",
|
|
"setBusyIndicator": "readonly",
|
|
"setInterval": "readonly",
|
|
"setSleepIndicator": "readonly",
|
|
"setTime": "readonly",
|
|
"setTimeout": "readonly",
|
|
"setWatch": "readonly",
|
|
"shiftOut": "readonly",
|
|
"SPI1": "readonly",
|
|
"Terminal": "readonly",
|
|
"trace": "readonly",
|
|
"VIBRATE": "readonly",
|
|
// Aliases and not defined at https://banglejs.com/reference
|
|
"g": "readonly",
|
|
"WIDGETS": "readonly",
|
|
"module": "readonly",
|
|
"exports": "writable",
|
|
"D0": "readonly",
|
|
"D1": "readonly",
|
|
"D2": "readonly",
|
|
"D3": "readonly",
|
|
"D4": "readonly",
|
|
"D5": "readonly",
|
|
"D6": "readonly",
|
|
"D7": "readonly",
|
|
"D8": "readonly",
|
|
"D9": "readonly",
|
|
"D10": "readonly",
|
|
"D11": "readonly",
|
|
"D12": "readonly",
|
|
"D13": "readonly",
|
|
"D14": "readonly",
|
|
"D15": "readonly",
|
|
"D16": "readonly",
|
|
"D17": "readonly",
|
|
"D18": "readonly",
|
|
"D19": "readonly",
|
|
"D20": "readonly",
|
|
"D21": "readonly",
|
|
"D22": "readonly",
|
|
"D23": "readonly",
|
|
"D24": "readonly",
|
|
"D25": "readonly",
|
|
"D26": "readonly",
|
|
"D27": "readonly",
|
|
"D28": "readonly",
|
|
"D29": "readonly",
|
|
"D30": "readonly",
|
|
"D31": "readonly",
|
|
|
|
"bleServiceOptions": "writable", // available in boot.js code that's called ad part of bootupdate
|
|
},
|
|
"parserOptions": {
|
|
"ecmaVersion": 11
|
|
},
|
|
"rules": {
|
|
"indent": [
|
|
"off",
|
|
2,
|
|
{
|
|
"SwitchCase": 1
|
|
}
|
|
],
|
|
"no-constant-condition": "off",
|
|
"no-delete-var": "off",
|
|
"no-empty": ["warn", { "allowEmptyCatch": true }],
|
|
"no-global-assign": "off",
|
|
"no-inner-declarations": "off",
|
|
"no-prototype-builtins": "off",
|
|
"no-redeclare": "off",
|
|
"no-unreachable": "warn",
|
|
"no-cond-assign": "warn",
|
|
"no-useless-catch": "warn",
|
|
"no-undef": "warn",
|
|
"no-unused-vars": ["warn", { "args": "none" } ],
|
|
"no-useless-escape": "off",
|
|
"no-control-regex" : "off"
|
|
},
|
|
overrides: [
|
|
{
|
|
files: ["*.ts"],
|
|
extends: [
|
|
"eslint:recommended",
|
|
"plugin:@typescript-eslint/recommended",
|
|
],
|
|
"parser": "@typescript-eslint/parser",
|
|
"plugins": ["@typescript-eslint"],
|
|
rules: {
|
|
"no-delete-var": "off",
|
|
"no-empty": ["error", { "allowEmptyCatch": true }],
|
|
"no-prototype-builtins": "off",
|
|
"prefer-const": "off",
|
|
"prefer-rest-params": "off",
|
|
"no-control-regex" : "off",
|
|
"@typescript-eslint/no-delete-var": "off",
|
|
"@typescript-eslint/no-explicit-any": "off",
|
|
"@typescript-eslint/no-this-alias": "off",
|
|
"@typescript-eslint/no-unused-vars": "off",
|
|
"@typescript-eslint/no-var-requires": "off",
|
|
}
|
|
},
|
|
...Object.entries(lintExemptions).map(([filePath, {rules}]) => ({
|
|
files: [filePath],
|
|
rules: Object.fromEntries(rules.map(rule => [rule, "off"])),
|
|
})),
|
|
],
|
|
ignorePatterns: findGeneratedJS(["apps/", "modules/"]),
|
|
reportUnusedDisableDirectives: true,
|
|
}
|