diff --git a/.editorconfig b/.editorconfig index 62276b0d..bfd7ac53 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,11 +7,11 @@ indent_style = space insert_final_newline = true trim_trailing_whitespace = true -[.eslintrc,*.{json,yml,yaml,rst,md}] +[*.{json,yml,yaml,rst,md}] indent_size = 2 # Do not configure editor for libs and autogenerated content -[*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst] +[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}] charset = unset end_of_line = unset indent_size = unset diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 28a0808b..00000000 --- a/.eslintrc +++ /dev/null @@ -1,291 +0,0 @@ -{ - "globals": { - "$": false, - "_": false, - "fuzzy": false, - "jQuery": false, - "moment": false, - "odoo": false, - "openerp": false, - "self": false - }, - "env": { - "browser": true - }, - "rules": { - "no-alert": "warn", - "no-array-constructor": "warn", - "no-bitwise": "off", - "no-caller": "warn", - "no-case-declarations": "warn", - "no-catch-shadow": "warn", - "no-class-assign": "warn", - "no-cond-assign": "warn", - "no-confusing-arrow": "warn", - "no-console": "off", - "no-const-assign": "warn", - "no-constant-condition": "warn", - "no-continue": "off", - "no-control-regex": "warn", - "no-debugger": "warn", - "no-delete-var": "warn", - "no-div-regex": "warn", - "no-dupe-args": "warn", - "no-dupe-class-members": "warn", - "no-dupe-keys": "warn", - "no-duplicate-case": "warn", - "no-duplicate-imports": "warn", - "no-else-return": "warn", - "no-empty": "warn", - "no-empty-character-class": "warn", - "no-empty-function": "warn", - "no-empty-pattern": "warn", - "no-eq-null": "warn", - "no-eval": "warn", - "no-ex-assign": "warn", - "no-extend-native": "warn", - "no-extra-bind": "warn", - "no-extra-boolean-cast": "warn", - "no-extra-label": "warn", - "no-extra-parens": "warn", - "no-extra-semi": "warn", - "no-fallthrough": "warn", - "no-floating-decimal": "warn", - "no-func-assign": "warn", - "no-implicit-coercion": ["warn", { - "allow": ["~"] - }], - "no-implicit-globals": "warn", - "no-implied-eval": "warn", - "no-inline-comments": "warn", - "no-inner-declarations": "warn", - "no-invalid-regexp": "warn", - "no-invalid-this": "off", - "no-irregular-whitespace": "warn", - "no-iterator": "warn", - "no-label-var": "warn", - "no-labels": "warn", - "no-lone-blocks": "warn", - "no-lonely-if": "warn", - "no-loop-func": "off", - "no-magic-numbers": "off", - "no-mixed-operators": "warn", - "no-mixed-requires": "warn", - "no-mixed-spaces-and-tabs": "warn", - "no-multi-spaces": "warn", - "no-multi-str": "warn", - "no-multiple-empty-lines": "warn", - "no-native-reassign": "warn", - "no-negated-condition": "warn", - "no-negated-in-lhs": "warn", - "no-nested-ternary": "off", - "no-new": "warn", - "no-new-func": "warn", - "no-new-object": "warn", - "no-new-require": "warn", - "no-new-symbol": "warn", - "no-new-wrappers": "warn", - "no-obj-calls": "warn", - "no-octal": "warn", - "no-octal-escape": "warn", - "no-param-reassign": "warn", - "no-path-concat": "warn", - "no-plusplus": "off", - "no-process-env": "warn", - "no-process-exit": "warn", - "no-proto": "warn", - "no-prototype-builtins": "warn", - "no-redeclare": "warn", - "no-regex-spaces": "warn", - "no-restricted-globals": "warn", - "no-restricted-imports": "warn", - "no-restricted-modules": "warn", - "no-restricted-syntax": "warn", - "no-return-assign": "warn", - "no-script-url": "warn", - "no-self-assign": "warn", - "no-self-compare": "warn", - "no-sequences": "warn", - "no-shadow": "warn", - "no-shadow-restricted-names": "warn", - "no-whitespace-before-property": "warn", - "no-spaced-func": "warn", - "no-sparse-arrays": "warn", - "no-sync": "warn", - "no-tabs": "warn", - "no-ternary": "off", - "no-trailing-spaces": "warn", - "no-this-before-super": "warn", - "no-throw-literal": "warn", - "no-undef": "warn", - "no-undef-init": "warn", - "no-undefined": "off", - "no-unexpected-multiline": "warn", - "no-underscore-dangle": "off", - "no-unmodified-loop-condition": "warn", - "no-unneeded-ternary": "warn", - "no-unreachable": "warn", - "no-unsafe-finally": "warn", - "no-unused-expressions": "warn", - "no-unused-labels": "warn", - "no-unused-vars": "warn", - "no-use-before-define": "warn", - "no-useless-call": "warn", - "no-useless-computed-key": "warn", - "no-useless-concat": "warn", - "no-useless-constructor": "warn", - "no-useless-escape": "warn", - "no-useless-rename": "warn", - "no-void": "warn", - "no-var": "off", - "no-warning-comments": "off", - "no-with": "warn", - "array-bracket-spacing": "off", - "array-callback-return": "warn", - "arrow-body-style": "warn", - "arrow-parens": "warn", - "arrow-spacing": "off", - "accessor-pairs": "warn", - "block-scoped-var": "off", - "block-spacing": ["warn", "always"], - "brace-style": "warn", - "callback-return": "warn", - "camelcase": "off", - "capitalized-comments": ["warn", "always", { - "ignoreConsecutiveComments": true, - "ignoreInlineComments": true - }], - "comma-dangle": ["warn", "always-multiline"], - "comma-spacing": ["warn", { - "before": false, - "after": true - }], - "comma-style": "warn", - "complexity": [ - "warn", - 15 - ], - "computed-property-spacing": "off", - "consistent-return": "off", - "consistent-this": "off", - "constructor-super": "warn", - "curly": "warn", - "default-case": "off", - "dot-location": ["warn", "property"], - "dot-notation": "warn", - "eol-last": "warn", - "eqeqeq": "warn", - "func-names": "off", - "func-style": "off", - "generator-star-spacing": "off", - "global-require": "warn", - "guard-for-in": "off", - "handle-callback-err": "warn", - "id-blacklist": "warn", - "id-length": "off", - "id-match": "warn", - "indent": "warn", - "init-declarations": "warn", - "jsx-quotes": "warn", - "key-spacing": "off", - "keyword-spacing": "warn", - "linebreak-style": [ - "warn", - "unix" - ], - "lines-around-comment": "warn", - "max-depth": "warn", - "max-len": ["warn", { - "code": 88, - "ignorePattern": "odoo\\.define\\(", - "tabWidth": 4 - }], - "max-lines": "off", - "max-nested-callbacks": "warn", - "max-params": "off", - "max-statements": "off", - "max-statements-per-line": "warn", - "multiline-ternary": "off", - "new-cap": "off", - "new-parens": "warn", - "newline-after-var": "off", - "newline-before-return": "off", - "newline-per-chained-call": "off", - "object-curly-newline": ["warn", { "consistent": true }], - "object-curly-spacing": ["warn", "never"], - "object-property-newline": ["warn", { - "allowAllPropertiesOnSameLine": true - }], - "object-shorthand": "off", - "one-var": "off", - "one-var-declaration-per-line": "off", - "operator-assignment": "warn", - "operator-linebreak": "warn", - "padded-blocks": "off", - "prefer-arrow-callback": "off", - "prefer-const": "warn", - "prefer-reflect": "off", - "prefer-rest-params": "off", - "prefer-spread": "off", - "prefer-template": "off", - "quote-props": "off", - "quotes": "off", - "radix": "warn", - "require-yield": "warn", - "rest-spread-spacing": "off", - "semi": [ - "warn", - "always" - ], - "semi-spacing": "warn", - "sort-imports": "warn", - "sort-vars": "off", - "space-before-blocks": "warn", - "space-before-function-paren": "warn", - "space-in-parens": "off", - "space-infix-ops": "off", - "space-unary-ops": "off", - "spaced-comment": ["warn", "always"], - "strict": ["warn", "function"], - "template-curly-spacing": "off", - "unicode-bom": "warn", - "use-isnan": "warn", - "valid-jsdoc": ["warn", { - "prefer": { - "arg": "param", - "argument": "param", - "augments": "extends", - "constructor": "class", - "exception": "throws", - "func": "function", - "method": "function", - "prop": "property", - "return": "returns", - "virtual": "abstract", - "yield": "yields" - }, - "preferType": { - "array": "Array", - "bool": "Boolean", - "boolean": "Boolean", - "number": "Number", - "object": "Object", - "str": "String", - "string": "String" - }, - "requireParamDescription": false, - "requireReturn": false, - "requireReturnDescription": false, - "requireReturnType": false - }], - "valid-typeof": "warn", - "vars-on-top": "off", - "wrap-iife": "warn", - "wrap-regex": "warn", - "yield-star-spacing": "off", - "yoda": "warn" - }, - "parserOptions": { - "ecmaVersion": 2017 - } -} diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 00000000..88f2881b --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,180 @@ +env: + browser: true + +# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 +parserOptions: + ecmaVersion: 2017 + +# Globals available in Odoo that shouldn't produce errorings +globals: + _: readonly + $: readonly + fuzzy: readonly + jQuery: readonly + moment: readonly + odoo: readonly + openerp: readonly + Promise: readonly + +# Styling is handled by Prettier, so we only need to enable AST rules; +# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890 +rules: + accessor-pairs: warn + array-callback-return: warn + callback-return: warn + capitalized-comments: + - warn + - always + - ignoreConsecutiveComments: true + ignoreInlineComments: true + complexity: + - warn + - 15 + constructor-super: warn + dot-notation: warn + eqeqeq: warn + global-require: warn + handle-callback-err: warn + id-blacklist: warn + id-match: warn + init-declarations: error + max-depth: warn + max-nested-callbacks: warn + max-statements-per-line: warn + no-alert: warn + no-array-constructor: warn + no-caller: warn + no-case-declarations: warn + no-class-assign: warn + no-cond-assign: error + no-const-assign: error + no-constant-condition: warn + no-control-regex: warn + no-debugger: error + no-delete-var: warn + no-div-regex: warn + no-dupe-args: error + no-dupe-class-members: error + no-dupe-keys: error + no-duplicate-case: error + no-duplicate-imports: error + no-else-return: warn + no-empty-character-class: warn + no-empty-function: error + no-empty-pattern: error + no-empty: warn + no-eq-null: error + no-eval: error + no-ex-assign: error + no-extend-native: warn + no-extra-bind: warn + no-extra-boolean-cast: warn + no-extra-label: warn + no-fallthrough: warn + no-func-assign: error + no-global-assign: error + no-implicit-coercion: + - warn + - allow: ["~"] + no-implicit-globals: warn + no-implied-eval: warn + no-inline-comments: warn + no-inner-declarations: warn + no-invalid-regexp: warn + no-irregular-whitespace: warn + no-iterator: warn + no-label-var: warn + no-labels: warn + no-lone-blocks: warn + no-lonely-if: error + no-mixed-requires: error + no-multi-str: warn + no-native-reassign: error + no-negated-condition: warn + no-negated-in-lhs: error + no-new-func: warn + no-new-object: warn + no-new-require: warn + no-new-symbol: warn + no-new-wrappers: warn + no-new: warn + no-obj-calls: warn + no-octal-escape: warn + no-octal: warn + no-param-reassign: warn + no-path-concat: warn + no-process-env: warn + no-process-exit: warn + no-proto: warn + no-prototype-builtins: warn + no-redeclare: warn + no-regex-spaces: warn + no-restricted-globals: warn + no-restricted-imports: warn + no-restricted-modules: warn + no-restricted-syntax: warn + no-return-assign: error + no-script-url: warn + no-self-assign: warn + no-self-compare: warn + no-sequences: warn + no-shadow-restricted-names: warn + no-shadow: warn + no-sparse-arrays: warn + no-sync: warn + no-this-before-super: warn + no-throw-literal: warn + no-undef-init: warn + no-undef: error + no-unmodified-loop-condition: warn + no-unneeded-ternary: error + no-unreachable: error + no-unsafe-finally: error + no-unused-expressions: error + no-unused-labels: error + no-unused-vars: error + no-use-before-define: error + no-useless-call: warn + no-useless-computed-key: warn + no-useless-concat: warn + no-useless-constructor: warn + no-useless-escape: warn + no-useless-rename: warn + no-void: warn + no-with: warn + operator-assignment: [error, always] + prefer-const: warn + radix: warn + require-yield: warn + sort-imports: warn + spaced-comment: [error, always] + strict: [error, function] + use-isnan: error + valid-jsdoc: + - warn + - prefer: + arg: param + argument: param + augments: extends + constructor: class + exception: throws + func: function + method: function + prop: property + return: returns + virtual: abstract + yield: yields + preferType: + array: Array + bool: Boolean + boolean: Boolean + number: Number + object: Object + str: String + string: String + requireParamDescription: false + requireReturn: false + requireReturnDescription: false + requireReturnType: false + valid-typeof: warn + yoda: warn diff --git a/.isort.cfg b/.isort.cfg index 5751c40d..7683badf 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -9,4 +9,4 @@ line_length=88 known_odoo=odoo known_odoo_addons=odoo.addons sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER -known_third_party= +default_section=THIRDPARTY diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 876d1e98..75015816 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,68 +1,99 @@ -exclude: "^setup/|/static/lib/|/static/src/lib/" +exclude: | + (?x) + # Files and folders generated by bots, to avoid loops + ^setup/|/static/description/index\.html$| + # Maybe reactivate this when all README files include prettier ignore tags? + ^README\.md$| + # Library files can have extraneous formatting (even minimized) + /static/(src/)?lib/| + # Repos using Sphinx to generate docs don't need prettying + ^docs/_templates/.*\.html$| + # You don't usually want a bot to modify your legal texts + (LICENSE.*|COPYING.*) default_language_version: python: python3 repos: -- repo: https://github.com/psf/black - rev: 19.3b0 - hooks: - - id: black -- repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.3.0 - hooks: - - id: trailing-whitespace - # exclude autogenerated files - exclude: /README\.rst$|\.pot?$ - - id: end-of-file-fixer - # exclude autogenerated files - exclude: /README\.rst$|\.pot?$ - - id: debug-statements - - id: flake8 - name: flake8 except __init__.py - exclude: /__init__\.py$ - additional_dependencies: ["flake8-bugbear==19.8.0"] - - id: flake8 - name: flake8 only __init__.py - args: ["--extend-ignore=F401"] # ignore unused imports in __init__.py - files: /__init__\.py$ - additional_dependencies: ["flake8-bugbear==19.8.0"] - - id: fix-encoding-pragma - args: ["--remove"] - - id: check-case-conflict - - id: check-docstring-first - - id: check-executables-have-shebangs - - id: check-merge-conflict - - id: check-symlinks - - id: check-xml - - id: mixed-line-ending - args: ["--fix=lf"] -- repo: https://github.com/pre-commit/mirrors-pylint - rev: v2.3.1 - hooks: - - id: pylint - name: pylint with optional checks - args: ["--rcfile=.pylintrc", "--exit-zero"] - verbose: true - additional_dependencies: ["pylint-odoo==3.0.3"] - - id: pylint - name: pylint with mandatory checks - args: ["--rcfile=.pylintrc-mandatory"] - additional_dependencies: ["pylint-odoo==3.0.3"] -- repo: https://github.com/asottile/pyupgrade - rev: v1.24.0 - hooks: - - id: pyupgrade -- repo: https://github.com/asottile/seed-isort-config - rev: v1.9.3 - hooks: - - id: seed-isort-config -- repo: https://github.com/pre-commit/mirrors-isort - rev: v4.3.21 - hooks: - - id: isort - name: isort except __init__.py - exclude: /__init__\.py$ -- repo: https://github.com/pre-commit/mirrors-eslint - rev: v6.5.1 - hooks: - - id: eslint - verbose: true + - repo: https://github.com/psf/black + rev: 19.10b0 + hooks: + - id: black + - repo: https://github.com/prettier/prettier + rev: "1.19.1" + hooks: + - id: prettier + # TODO Avoid awebdeveloper/pre-commit-prettier if possible + # HACK https://github.com/prettier/prettier/issues/7407 + - repo: https://github.com/awebdeveloper/pre-commit-prettier + rev: v0.0.1 + hooks: + - id: prettier + name: prettier xml plugin + additional_dependencies: + - "prettier@1.19.1" + - "@prettier/plugin-xml@0.7.2" + files: \.xml$ + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v6.8.0 + hooks: + - id: eslint + verbose: true + args: + - --color + - --fix + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.4.0 + hooks: + - id: trailing-whitespace + # exclude autogenerated files + exclude: /README\.rst$|\.pot?$ + - id: end-of-file-fixer + # exclude autogenerated files + exclude: /README\.rst$|\.pot?$ + - id: debug-statements + - id: flake8 + name: flake8 except __init__.py + exclude: /__init__\.py$ + additional_dependencies: ["flake8-bugbear==19.8.0"] + - id: flake8 + name: flake8 only __init__.py + args: ["--extend-ignore=F401"] # ignore unused imports in __init__.py + files: /__init__\.py$ + additional_dependencies: ["flake8-bugbear==19.8.0"] + - id: fix-encoding-pragma + args: ["--remove"] + - id: check-case-conflict + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-merge-conflict + # exclude files where underlines are not distinguishable from merge conflicts + exclude: /README\.rst$|^docs/.*\.rst$ + - id: check-symlinks + - id: check-xml + - id: mixed-line-ending + args: ["--fix=lf"] + - repo: https://github.com/pre-commit/mirrors-pylint + rev: v2.3.1 + hooks: + - id: pylint + name: pylint with optional checks + args: ["--rcfile=.pylintrc", "--exit-zero"] + verbose: true + additional_dependencies: ["pylint-odoo==3.1.0"] + - id: pylint + name: pylint with mandatory checks + args: ["--rcfile=.pylintrc-mandatory"] + additional_dependencies: ["pylint-odoo==3.1.0"] + - repo: https://github.com/asottile/pyupgrade + rev: v1.26.2 + hooks: + - id: pyupgrade + - repo: https://github.com/pre-commit/mirrors-isort + rev: v4.3.21 + hooks: + - id: isort + name: isort except __init__.py + exclude: /__init__\.py$ + - repo: https://github.com/acsone/setuptools-odoo + rev: 2.5.2 + hooks: + - id: setuptools-odoo-make-default diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 00000000..fc5f3a7c --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,8 @@ +# Defaults for all prettier-supported languages. +# Prettier will complete this with settings from .editorconfig file. +bracketSpacing: false +printWidth: 88 +proseWrap: always +semi: true +trailingComma: "es5" +xmlWhitespaceSensitivity: "ignore" diff --git a/.travis.yml b/.travis.yml index 8d16e8fc..6716bfad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: python cache: directories: - - $HOME/.cache/pip - - $HOME/.cache/pre-commit + - $HOME/.cache/pip + - $HOME/.cache/pre-commit python: - "3.6" @@ -11,7 +11,7 @@ addons: postgresql: "9.6" apt: packages: - - expect-dev # provides unbuffer utility + - expect-dev # provides unbuffer utility stages: - linting @@ -34,10 +34,11 @@ jobs: env: global: - - VERSION="13.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0" + - VERSION="13.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0" install: - - git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools + - git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git + ${HOME}/maintainer-quality-tools - export PATH=${HOME}/maintainer-quality-tools/travis:${PATH} - travis_install_nightly diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 92d051bc..8f7056a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,7 @@ # OCA Guidelines -Please follow the official guide from the [OCA Guidelines page](https://github.com/OCA/maintainer-tools/blob/master/CONTRIBUTING.md). +Please follow the official guide from the +[OCA Guidelines page](https://github.com/OCA/maintainer-tools/blob/master/CONTRIBUTING.md). ## Project Specific Guidelines