2017-02-09 16:20:48 +00:00
|
|
|
# https://github.com/eslint/eslint/blob/master/docs/rules/README.md
|
|
|
|
|
|
|
|
parserOptions:
|
|
|
|
ecmaVersion: 2017
|
|
|
|
|
|
|
|
env:
|
|
|
|
browser: true
|
|
|
|
commonjs: true
|
|
|
|
es6: true
|
|
|
|
webextensions: true
|
|
|
|
|
|
|
|
globals:
|
|
|
|
CodeMirror: false
|
|
|
|
runTryCatch: true
|
Improve style caching, cache requests too, add code:false mode
Previously, when a cache was invalidated and every tab/iframe issued a getStyles request, we previous needlessly accessed IndexedDB for each of these requests. It happened because 1) the global cachedStyles was created only at the end of the async DB-reading, 2) and each style record is retrieved asynchronously so the single threaded JS engine interleaved all these operations. It could easily span a few seconds when many tabs are open and you have like 100 styles.
Now, in getStyles: all requests issued while cachedStyles is being populated are queued and invoked at the end.
Now, in filterStyles: all requests are cached using the request's options combined in a string as a key. It also helps on each navigation because we monitor page loading process at different stages: before, when committed, history traversal, requesting applicable styles by a content script. Icon badge update also may issue a copy of the just issued request by one of the navigation listeners.
Now, the caches are invalidated smartly: style add/update/delete/toggle only purges filtering cache, and modifies style cache in-place without re-reading the entire IndexedDB.
Now, code:false mode for manage page that only needs style meta. It reduces the transferred message size 10-100 times thus reducing the overhead caused by to internal JSON-fication in the extensions API.
Also fast&direct getStylesSafe for own pages; code cosmetics
2017-03-17 22:50:35 +00:00
|
|
|
getStylesSafe: true
|
2017-02-09 16:20:48 +00:00
|
|
|
getStyles: true
|
|
|
|
updateIcon: true
|
|
|
|
saveStyle: true
|
|
|
|
invalidateCache: true
|
|
|
|
getDatabase: true
|
|
|
|
prefs: false
|
|
|
|
reportError: true
|
|
|
|
getActiveTab: true
|
|
|
|
t: true
|
|
|
|
getCodeMirrorThemes: true
|
|
|
|
setupLivePrefs: true
|
|
|
|
sessionStorageHash: true
|
|
|
|
template: true
|
|
|
|
tE: true
|
|
|
|
tHTML: true
|
|
|
|
CSSLint: true
|
|
|
|
enableStyle: true
|
|
|
|
deleteStyle: true
|
|
|
|
getType: true
|
|
|
|
importStyles: true
|
|
|
|
getActiveTabRealURL: true
|
2017-03-21 01:32:38 +00:00
|
|
|
openURL: true
|
2017-03-25 05:54:58 +00:00
|
|
|
$: true
|
|
|
|
$$: true
|
|
|
|
animateElement: true
|
|
|
|
scrollElementIntoView: true
|
|
|
|
getClickedStyleElement: true
|
|
|
|
getClickedStyleId: true
|
2017-03-21 01:32:38 +00:00
|
|
|
onDOMready: true
|
2017-02-09 16:20:48 +00:00
|
|
|
getDomains: true
|
|
|
|
webSqlStorage: true
|
|
|
|
notifyAllTabs: true
|
|
|
|
handleUpdate: true
|
|
|
|
handleDelete: true
|
|
|
|
|
|
|
|
rules:
|
|
|
|
accessor-pairs: [2]
|
|
|
|
array-bracket-spacing: [2, never]
|
|
|
|
array-callback-return: [0]
|
|
|
|
arrow-body-style: [2, as-needed]
|
|
|
|
arrow-parens: [2, as-needed]
|
|
|
|
arrow-spacing: [2, {before: true, after: true}]
|
|
|
|
block-scoped-var: [2]
|
|
|
|
brace-style: [2, 1tbs, {allowSingleLine: true}]
|
|
|
|
camelcase: [2, {properties: never}]
|
|
|
|
class-methods-use-this: [2]
|
|
|
|
comma-dangle: [0]
|
|
|
|
comma-spacing: [2, {before: false, after: true}]
|
|
|
|
comma-style: [2, last]
|
|
|
|
complexity: [0]
|
|
|
|
computed-property-spacing: [2, never]
|
|
|
|
consistent-return: [0]
|
|
|
|
constructor-super: [2]
|
|
|
|
curly: [2]
|
|
|
|
default-case: [0]
|
|
|
|
dot-location: [2, property]
|
|
|
|
dot-notation: [0]
|
|
|
|
eol-last: [2]
|
|
|
|
eqeqeq: [0]
|
|
|
|
func-call-spacing: [2, never]
|
|
|
|
func-name-matching: [0]
|
|
|
|
func-names: [0]
|
|
|
|
generator-star-spacing: [2, before]
|
|
|
|
global-require: [0]
|
|
|
|
guard-for-in: [2]
|
|
|
|
handle-callback-err: [2, ^(err|error)$]
|
|
|
|
id-blacklist: [0]
|
|
|
|
id-length: [0]
|
|
|
|
id-match: [0]
|
|
|
|
indent: [2, 2, {VariableDeclarator: 0}]
|
|
|
|
jsx-quotes: [0]
|
|
|
|
key-spacing: [0]
|
|
|
|
keyword-spacing: [2]
|
|
|
|
linebreak-style: [2, unix]
|
|
|
|
lines-around-comment: [0]
|
|
|
|
lines-around-directive: [0]
|
|
|
|
max-len: [2, {code: 120, ignoreComments: true, ignoreRegExpLiterals: true}]
|
|
|
|
max-lines: [0]
|
|
|
|
max-nested-callbacks: [0]
|
|
|
|
max-params: [0]
|
|
|
|
max-statements-per-line: [0]
|
|
|
|
max-statements: [0]
|
|
|
|
multiline-ternary: [0]
|
|
|
|
new-cap: [0]
|
|
|
|
new-parens: [2]
|
|
|
|
newline-before-return: [0]
|
|
|
|
newline-per-chained-call: [0]
|
|
|
|
no-alert: [0]
|
|
|
|
no-array-constructor: [0]
|
|
|
|
no-bitwise: [0]
|
|
|
|
no-caller: [2]
|
|
|
|
no-case-declarations: [2]
|
|
|
|
no-class-assign: [2]
|
|
|
|
no-cond-assign: [2, except-parens]
|
|
|
|
no-confusing-arrow: [2]
|
|
|
|
no-const-assign: [2]
|
|
|
|
no-constant-condition: [0]
|
|
|
|
no-continue: [0]
|
|
|
|
no-control-regex: [2]
|
|
|
|
no-debugger: [2]
|
|
|
|
no-delete-var: [2]
|
|
|
|
no-div-regex: [0]
|
|
|
|
no-dupe-args: [2]
|
|
|
|
no-dupe-class-members: [2]
|
|
|
|
no-dupe-keys: [2]
|
|
|
|
no-duplicate-case: [2]
|
|
|
|
no-duplicate-imports: [2]
|
|
|
|
no-else-return: [0]
|
|
|
|
no-empty-character-class: [2]
|
|
|
|
no-empty-function: [0]
|
|
|
|
no-empty-pattern: [2]
|
|
|
|
no-empty: [2, {allowEmptyCatch: true}]
|
|
|
|
no-eq-null: [2]
|
|
|
|
no-eval: [2]
|
|
|
|
no-ex-assign: [2]
|
|
|
|
no-extend-native: [2]
|
|
|
|
no-extra-bind: [2]
|
|
|
|
no-extra-boolean-cast: [2]
|
|
|
|
no-extra-label: [0]
|
|
|
|
no-extra-parens: [0]
|
|
|
|
no-extra-semi: [2]
|
|
|
|
no-fallthrough: [2]
|
|
|
|
no-floating-decimal: [0]
|
|
|
|
no-func-assign: [2]
|
|
|
|
no-global-assign: [2]
|
|
|
|
no-implicit-coercion: [2]
|
|
|
|
no-implicit-globals: [0]
|
|
|
|
no-implied-eval: [2]
|
|
|
|
no-inline-comments: [0]
|
|
|
|
no-inner-declarations: [2]
|
|
|
|
no-invalid-regexp: [2]
|
|
|
|
no-invalid-this: [0]
|
|
|
|
no-irregular-whitespace: [2]
|
|
|
|
no-iterator: [2]
|
|
|
|
no-label-var: [2]
|
|
|
|
no-labels: [2]
|
|
|
|
no-lone-blocks: [2]
|
|
|
|
no-lonely-if: [0]
|
|
|
|
no-loop-func: [0]
|
|
|
|
no-magic-numbers: [0]
|
|
|
|
no-mixed-operators: [0]
|
|
|
|
no-mixed-requires: [2, true]
|
|
|
|
no-mixed-spaces-and-tabs: [2]
|
|
|
|
no-multi-spaces: [0]
|
|
|
|
no-multi-str: [2]
|
|
|
|
no-multiple-empty-lines: [2, {max: 1, maxEOF: 0, maxBOF: 0}]
|
|
|
|
no-native-reassign: [2]
|
|
|
|
no-negated-condition: [0]
|
|
|
|
no-negated-in-lhs: [2]
|
|
|
|
no-nested-ternary: [0]
|
|
|
|
no-new-func: [2]
|
|
|
|
no-new-object: [2]
|
|
|
|
no-new-require: [2]
|
|
|
|
no-new-symbol: [2]
|
|
|
|
no-new-wrappers: [2]
|
|
|
|
no-new: [0]
|
|
|
|
no-obj-calls: [2]
|
|
|
|
no-octal-escape: [2]
|
|
|
|
no-octal: [2]
|
|
|
|
no-path-concat: [2]
|
|
|
|
no-process-exit: [0]
|
|
|
|
no-proto: [2]
|
|
|
|
no-redeclare: [2]
|
|
|
|
no-regex-spaces: [2]
|
|
|
|
no-restricted-imports: [0]
|
|
|
|
no-restricted-modules: [2, domain, freelist, smalloc, sys]
|
|
|
|
no-restricted-syntax: [2, WithStatement]
|
|
|
|
no-return-assign: [2, except-parens]
|
|
|
|
no-return-await: [2]
|
|
|
|
no-script-url: [2]
|
|
|
|
no-self-assign: [2, {props: true}]
|
|
|
|
no-self-compare: [2]
|
|
|
|
no-sequences: [2]
|
|
|
|
no-shadow-restricted-names: [2]
|
|
|
|
no-shadow: [0]
|
|
|
|
no-spaced-func: [2]
|
|
|
|
no-sparse-arrays: [2]
|
|
|
|
no-tabs: [2]
|
|
|
|
no-template-curly-in-string: [2]
|
|
|
|
no-this-before-super: [2]
|
|
|
|
no-throw-literal: [2]
|
|
|
|
no-trailing-spaces: [2]
|
|
|
|
no-undef-init: [2]
|
|
|
|
no-undef: [2]
|
|
|
|
no-undefined: [0]
|
|
|
|
no-underscore-dangle: [0]
|
|
|
|
no-unexpected-multiline: [2]
|
|
|
|
no-unmodified-loop-condition: [2]
|
|
|
|
no-unneeded-ternary: [2]
|
|
|
|
no-unreachable: [2]
|
|
|
|
no-unsafe-finally: [2]
|
|
|
|
no-unsafe-negation: [2]
|
|
|
|
no-unused-expressions: [2]
|
|
|
|
no-unused-labels: [0]
|
|
|
|
no-unused-vars: [2, {args: all, varsIgnorePattern: clearError, argsIgnorePattern: ^_}]
|
|
|
|
no-use-before-define: [2, nofunc]
|
|
|
|
no-useless-call: [2]
|
|
|
|
no-useless-computed-key: [2]
|
|
|
|
no-useless-concat: [2]
|
|
|
|
no-useless-constructor: [2]
|
|
|
|
no-useless-escape: [2]
|
|
|
|
no-var: [0]
|
|
|
|
no-warning-comments: [0]
|
|
|
|
no-whitespace-before-property: [2]
|
|
|
|
no-with: [2]
|
|
|
|
object-curly-newline: [0]
|
|
|
|
object-curly-spacing: [2, never]
|
|
|
|
object-shorthand: [0]
|
|
|
|
one-var-declaration-per-line: [0]
|
|
|
|
one-var: [0]
|
|
|
|
operator-assignment: [2, always]
|
|
|
|
operator-linebreak: [2, after]
|
|
|
|
padded-blocks: [2, never]
|
|
|
|
prefer-numeric-literals: [2]
|
|
|
|
prefer-rest-params: [0]
|
|
|
|
quote-props: [0]
|
|
|
|
quotes: [2, double, avoid-escape]
|
|
|
|
radix: [2, as-needed]
|
|
|
|
require-jsdoc: [0]
|
|
|
|
require-yield: [2]
|
|
|
|
semi-spacing: [2, {before: false, after: true}]
|
|
|
|
semi: [2, always]
|
|
|
|
sort-imports: [0]
|
|
|
|
sort-keys: [0]
|
|
|
|
space-before-blocks: [2, always]
|
|
|
|
space-before-function-paren: [2, never]
|
|
|
|
space-in-parens: [2, never]
|
|
|
|
space-infix-ops: [2]
|
|
|
|
space-unary-ops: [2]
|
|
|
|
spaced-comment: [2, always, {markers: ["!"]}]
|
|
|
|
strict: [2, global]
|
|
|
|
symbol-description: [2]
|
|
|
|
template-curly-spacing: [2, never]
|
|
|
|
unicode-bom: [2, never]
|
|
|
|
use-isnan: [2]
|
|
|
|
valid-typeof: [2]
|
|
|
|
wrap-iife: [2, inside]
|
|
|
|
yield-star-spacing: [2, {before: true, after: false}]
|
|
|
|
yoda: [2, never]
|