Switched from JSCS to ESLint
This patch switches horizon from using JSCS to using ESlint. It adds the john papa style guides as an eslint plugin, and deactivates additional linting rules so current cleanup efforts can focus on the issues remaining from JSCS. Once that cleanup effort is complete, we can switch our linting job to voting and move forward from there. YAML for .eslintrc was chosen because the JSON specification does not allow comments, and having comments (including rule links) will make it easier to discuss linting changes. Deactivated eslint rules have each been annotated with a # TODO statement, so we can address them in the future. Links in the documentation have been updated to new contributor guidelines, which will be updated after this patch lands. Linting may be executed by first installing npm dependencies using `npm install`, and then executing `npm run lint` at any time in the future. No python venv is required. For clarification: We are switching to ESLint because JSCS explicitly focuses on code-style, not on language use errors. For that purpose, JSCS explicitly defers to JSHint, which due to the 'do no evil' license is not usable. Since ESLint provides both the codestyle functionality, and the language use checks, of both JSCS and JSHint, it was deemed the only viable tool, http://lists.openstack.org/pipermail/openstack-dev/2015-June/067030.html Change-Id: Ib4c3f77f8cc3cdaa3c7558b7bc3a6d1299b6dcbe Partially-Implements: blueprint jscs-cleanup
This commit is contained in:
parent
e217e041d4
commit
c6c0352982
833
.eslintrc
Normal file
833
.eslintrc
Normal file
@ -0,0 +1,833 @@
|
||||
# For a detailed list of all options please see here:
|
||||
# http://eslint.org/docs/configuring/
|
||||
|
||||
# By default, ESLint uses Espree as its parser.
|
||||
parser: espree
|
||||
|
||||
# Enable eslint-plugin-angular
|
||||
plugins:
|
||||
- angular
|
||||
|
||||
# Set up globals
|
||||
globals:
|
||||
angular: false
|
||||
|
||||
# Most environment options are not explicitly enabled or disabled, only
|
||||
# included here for completeness' sake. They are commented out, because the
|
||||
# global updates.py script would otherwise override them during a global
|
||||
# requirements synchronization.
|
||||
#
|
||||
# Individual projects should choose which platforms they deploy to.
|
||||
|
||||
env:
|
||||
|
||||
# browser global variables.
|
||||
browser: true
|
||||
|
||||
# Node.js global variables and Node.js-specific rules.
|
||||
# node: true
|
||||
|
||||
# web workers global variables.
|
||||
# worker: true
|
||||
|
||||
# defines require() and define() as global variables as per the amd spec.
|
||||
# amd: true
|
||||
|
||||
# Adds all of the Jasmine testing global variables for version 1.3 and 2.0.
|
||||
jasmine: true
|
||||
|
||||
# phantomjs global variables.
|
||||
# phantomjs: true
|
||||
|
||||
# jquery global variables.
|
||||
# jquery: true
|
||||
|
||||
# prototypejs global variables.
|
||||
# prototypejs: true
|
||||
|
||||
# shelljs global variables.
|
||||
# shelljs: true
|
||||
|
||||
# meteor global variables.
|
||||
# meteor: true
|
||||
|
||||
# OpenStack uses Jasmine, not Mocha.
|
||||
mocha: false
|
||||
|
||||
# Openstack does not support ES6 at its present level of adoption.
|
||||
es6: false
|
||||
|
||||
|
||||
# Below we activate and configure the linting rules for all javascript in
|
||||
# OpenStack. These will be synchronized across all projects that make use of
|
||||
# them.
|
||||
rules:
|
||||
|
||||
#############################################################################
|
||||
# Possible Errors
|
||||
#############################################################################
|
||||
|
||||
# Disallow trailing commas, as those break some browsers.
|
||||
# http://eslint.org/docs/rules/comma-dangle
|
||||
comma-dangle:
|
||||
- 2
|
||||
- "never"
|
||||
|
||||
# Prevent the assignment of a variable in a conditional.
|
||||
# http://eslint.org/docs/rules/no-cond-assign
|
||||
no-cond-assign: 2
|
||||
|
||||
# Do not permit the use of console logging statements.
|
||||
# http://eslint.org/docs/rules/no-console
|
||||
no-console: 2
|
||||
|
||||
# Do not permit if (true) or if(false)
|
||||
# http://eslint.org/docs/rules/no-constant-condition
|
||||
no-constant-condition: 2
|
||||
|
||||
# Do not permit ASCII 0-31 (control characters) in regular expressions.
|
||||
# http://eslint.org/docs/rules/no-control-regex
|
||||
no-control-regex: 2
|
||||
|
||||
# Do not permit debugger; statements.
|
||||
# http://eslint.org/docs/rules/no-debugger
|
||||
no-debugger: 2
|
||||
|
||||
# Do not permit duplicate argument names in function declaration.
|
||||
# http://eslint.org/docs/rules/no-dupe-args
|
||||
no-dupe-args: 2
|
||||
|
||||
# Do not permit duplicate keys in object declarations.
|
||||
# http://eslint.org/docs/rules/no-dupe-keys
|
||||
no-dupe-keys: 2
|
||||
|
||||
# Do not permit duplicate cases in switch statements.
|
||||
# http://eslint.org/docs/rules/no-duplicate-case
|
||||
no-duplicate-case: 2
|
||||
|
||||
# Disallow empty regex character classes. (/[]/)
|
||||
# http://eslint.org/docs/rules/no-empty-character-class
|
||||
no-empty-character-class: 2
|
||||
|
||||
# Disallow empty block statements.
|
||||
# http://eslint.org/docs/rules/no-empty
|
||||
no-empty: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow assigning of the exception parameter in a catch block.
|
||||
# http://eslint.org/docs/rules/no-ex-assign
|
||||
no-ex-assign: 2
|
||||
|
||||
# Disallow the use of double negation (!!foo) if already in a boolean context
|
||||
# http://eslint.org/docs/rules/no-extra-boolean-cast
|
||||
no-extra-boolean-cast: 2
|
||||
|
||||
# Disallow extraneous parentheses around functions.
|
||||
# http://eslint.org/docs/rules/no-extra-parens
|
||||
no-extra-parens:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- "functions"
|
||||
|
||||
# Disallow extraneous semicolons.
|
||||
# http://eslint.org/docs/rules/no-extra-semi
|
||||
no-extra-semi: 2
|
||||
|
||||
# Disallow overwriting functions written as function declarations
|
||||
# http://eslint.org/docs/rules/no-func-assign
|
||||
no-func-assign: 2
|
||||
|
||||
# Disallow function or variable declarations in nested blocks
|
||||
# http://eslint.org/docs/rules/no-inner-declarations
|
||||
no-inner-declarations: 2
|
||||
|
||||
# Disallow invalid regular expression strings in the RegExp constructor
|
||||
# http://eslint.org/docs/rules/no-invalid-regexp
|
||||
no-invalid-regexp: 2
|
||||
|
||||
# Disallow irregular whitespace outside of strings and comments
|
||||
# http://eslint.org/docs/rules/no-irregular-whitespace
|
||||
no-irregular-whitespace: 2
|
||||
|
||||
# Disallow negation of the left operand of an in expression
|
||||
# http://eslint.org/docs/rules/no-negated-in-lhs
|
||||
no-negated-in-lhs: 2
|
||||
|
||||
# Disallow the use of object properties of the global object (Math and JSON) as functions
|
||||
# http://eslint.org/docs/rules/no-obj-calls
|
||||
no-obj-calls: 2
|
||||
|
||||
# Disallow multiple spaces in a regular expression literal
|
||||
# http://eslint.org/docs/rules/no-regex-spaces
|
||||
no-regex-spaces: 2
|
||||
|
||||
# Disallow reserved words being used as object literal keys
|
||||
# Disabled- this is for ECMA3 backwards compatibility only.
|
||||
# http://eslint.org/docs/rules/no-reserved-keys
|
||||
no-reserved-keys: 0
|
||||
|
||||
# Disallow sparse arrays
|
||||
# http://eslint.org/docs/rules/no-sparse-arrays
|
||||
no-sparse-arrays: 2
|
||||
|
||||
# Disallow unreachable statements
|
||||
# http://eslint.org/docs/rules/no-unreachable
|
||||
no-unreachable: 2
|
||||
|
||||
# Disallow comparisons with the value NaN
|
||||
# http://eslint.org/docs/rules/use-isnan
|
||||
use-isnan: 2
|
||||
|
||||
# Ensure JSDoc comments are valid
|
||||
# http://eslint.org/docs/rules/valid-jsdoc
|
||||
valid-jsdoc: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Ensure that the results of typeof are compared against a valid string
|
||||
# http://eslint.org/docs/rules/valid-typeof
|
||||
valid-typeof: 2
|
||||
|
||||
#############################################################################
|
||||
# Best Practices
|
||||
#############################################################################
|
||||
|
||||
# Enforces getter/setter pairs in objects
|
||||
# http://eslint.org/docs/rules/accessor-pairs
|
||||
accessor-pairs: 2
|
||||
|
||||
# Treat var statements as if they were block scoped
|
||||
# http://eslint.org/docs/rules/block-scoped-var
|
||||
block-scoped-var: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Specify the maximum cyclomatic complexity allowed in a program
|
||||
# http://eslint.org/docs/rules/complexity
|
||||
complexity:
|
||||
- 1
|
||||
- 10
|
||||
|
||||
# Require return statements to either always or never specify values
|
||||
# http://eslint.org/docs/rules/consistent-return
|
||||
consistent-return: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Specify curly brace conventions for all control statements
|
||||
# http://eslint.org/docs/rules/curly
|
||||
curly: 2
|
||||
|
||||
# Require default case in switch statements
|
||||
# http://eslint.org/docs/rules/default-case
|
||||
default-case: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# encourages use of dot notation whenever possible
|
||||
# http://eslint.org/docs/rules/dot-notation
|
||||
dot-notation: 2
|
||||
|
||||
# Enforces consistent newlines before or after dots
|
||||
# http://eslint.org/docs/rules/dot-location
|
||||
dot-location: 0
|
||||
|
||||
# Require the use of === and !==
|
||||
# http://eslint.org/docs/rules/eqeqeq
|
||||
eqeqeq: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Make sure for-in loops have an if statement
|
||||
# http://eslint.org/docs/rules/guard-for-in
|
||||
guard-for-in: 1
|
||||
|
||||
# Disallow the use of alert, confirm, and prompt
|
||||
# http://eslint.org/docs/rules/no-alert
|
||||
no-alert: 2
|
||||
|
||||
# Disallow use of arguments.caller or arguments.callee
|
||||
# http://eslint.org/docs/rules/no-caller
|
||||
no-caller: 2
|
||||
|
||||
# Disallow division operators explicitly at beginning of regular expression
|
||||
# http://eslint.org/docs/rules/no-div-regex
|
||||
no-div-regex: 2
|
||||
|
||||
# Disallow else after a return in an if
|
||||
# http://eslint.org/docs/rules/no-else-return
|
||||
no-else-return: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of labels for anything other then loops and switches
|
||||
# http://eslint.org/docs/rules/no-empty-label
|
||||
no-empty-label: 2
|
||||
|
||||
# Disallow comparisons to null without a type-checking operator
|
||||
# http://eslint.org/docs/rules/no-eq-null
|
||||
no-eq-null: 2
|
||||
|
||||
# Disallow use of eval()
|
||||
# http://eslint.org/docs/rules/no-eval
|
||||
no-eval: 2
|
||||
|
||||
# Disallow adding to native types
|
||||
# http://eslint.org/docs/rules/no-extend-native
|
||||
no-extend-native: 2
|
||||
|
||||
# Disallow unnecessary function binding
|
||||
# http://eslint.org/docs/rules/no-extra-bind
|
||||
no-extra-bind: 2
|
||||
|
||||
# Disallow fallthrough of case statements
|
||||
# http://eslint.org/docs/rules/no-fallthrough
|
||||
no-fallthrough: 2
|
||||
|
||||
# Disallow the use of leading or trailing decimal points in numeric literals
|
||||
# http://eslint.org/docs/rules/no-floating-decimal
|
||||
no-floating-decimal: 2
|
||||
|
||||
# Disallow use of eval()-like methods
|
||||
# http://eslint.org/docs/rules/no-implied-eval
|
||||
no-implied-eval: 2
|
||||
|
||||
# Disallow usage of __iterator__ property
|
||||
# http://eslint.org/docs/rules/no-iterator
|
||||
no-iterator: 2
|
||||
|
||||
# Disallow use of labeled statements
|
||||
# http://eslint.org/docs/rules/no-labels
|
||||
no-labels: 2
|
||||
|
||||
# Disallow unnecessary nested blocks
|
||||
# http://eslint.org/docs/rules/no-lone-blocks
|
||||
no-lone-blocks: 2
|
||||
|
||||
# Disallow creation of functions within loops
|
||||
# http://eslint.org/docs/rules/no-loop-func
|
||||
no-loop-func: 2
|
||||
|
||||
# Disallow use of multiple spaces
|
||||
# http://eslint.org/docs/rules/no-multi-spaces
|
||||
no-multi-spaces: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of multiline strings
|
||||
# http://eslint.org/docs/rules/no-multi-str
|
||||
no-multi-str: 2
|
||||
|
||||
# Disallow reassignments of native objects
|
||||
# http://eslint.org/docs/rules/no-native-reassign
|
||||
no-native-reassign: 2
|
||||
|
||||
# Disallow use of new operator for Function object
|
||||
# http://eslint.org/docs/rules/no-new-func
|
||||
no-new-func: 2
|
||||
|
||||
# Disallows creating new instances of String,Number, and Boolean
|
||||
# http://eslint.org/docs/rules/no-new-wrappers
|
||||
no-new-wrappers: 2
|
||||
|
||||
# Disallow use of new operator when not part of the assignment or comparison
|
||||
# http://eslint.org/docs/rules/no-new
|
||||
no-new: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251";
|
||||
# http://eslint.org/docs/rules/no-octal-escape
|
||||
no-octal-escape: 2
|
||||
|
||||
# Disallow use of octal literals
|
||||
# http://eslint.org/docs/rules/no-octal
|
||||
no-octal: 2
|
||||
|
||||
# Disallow reassignment of function parameters
|
||||
# http://eslint.org/docs/rules/no-param-reassign
|
||||
no-param-reassign: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of process.env
|
||||
#
|
||||
# Please consolidate all your env access to one single file, and apply
|
||||
# by-line exceptions there.
|
||||
#
|
||||
# http://eslint.org/docs/rules/no-process-env
|
||||
no-process-env: 2
|
||||
|
||||
# Disallow usage of __proto__ property
|
||||
# http://eslint.org/docs/rules/no-proto
|
||||
no-proto: 2
|
||||
|
||||
# Disallow declaring the same variable more than once
|
||||
# http://eslint.org/docs/rules/no-redeclare
|
||||
no-redeclare: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of assignment in return statement
|
||||
# http://eslint.org/docs/rules/no-return-assign
|
||||
no-return-assign: 2
|
||||
|
||||
# Disallow use of javascript: urls.
|
||||
# http://eslint.org/docs/rules/no-script-url
|
||||
no-script-url: 2
|
||||
|
||||
# Disallow comparisons where both sides are exactly the same
|
||||
# http://eslint.org/docs/rules/no-self-compare
|
||||
no-self-compare: 2
|
||||
|
||||
# Disallow use of comma operator
|
||||
# http://eslint.org/docs/rules/no-sequences
|
||||
no-sequences: 2
|
||||
|
||||
# Restrict what can be thrown as an exception
|
||||
# http://eslint.org/docs/rules/no-throw-literal
|
||||
no-throw-literal: 2
|
||||
|
||||
# Disallow usage of expressions in statement position
|
||||
# http://eslint.org/docs/rules/no-unused-expressions
|
||||
no-unused-expressions: 2
|
||||
|
||||
# Disallow use of void operator
|
||||
# http://eslint.org/docs/rules/no-void
|
||||
no-void: 2
|
||||
|
||||
# Disallow usage of configurable warning terms in comments - e.g. TODO
|
||||
# http://eslint.org/docs/rules/no-warning-comments
|
||||
no-warning-comments:
|
||||
- 1
|
||||
- terms:
|
||||
- "todo"
|
||||
- "xxx"
|
||||
- "fixme"
|
||||
|
||||
# Disallow use of the with statement
|
||||
# http://eslint.org/docs/rules/no-with
|
||||
no-with: 2
|
||||
|
||||
# Require use of the second argument for parseInt()
|
||||
# http://eslint.org/docs/rules/radix
|
||||
radix: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Requires to declare all vars on top of their containing scope
|
||||
#
|
||||
# http://eslint.org/docs/rules/vars-on-top
|
||||
vars-on-top: 0
|
||||
|
||||
# Require immediate function invocation to be wrapped in parentheses
|
||||
# http://eslint.org/docs/rules/wrap-iife
|
||||
wrap-iife:
|
||||
- 2
|
||||
- "any"
|
||||
|
||||
# Require or disallow Yoda conditions.
|
||||
# http://eslint.org/docs/rules/yoda
|
||||
yoda:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- "never"
|
||||
|
||||
|
||||
#############################################################################
|
||||
# Strict Mode
|
||||
#############################################################################
|
||||
# (Deprecated) require or disallow the "use strict" pragma in global scope
|
||||
# http://eslint.org/docs/rules/global-strict
|
||||
global-strict: 0
|
||||
|
||||
# (Deprecated) disallow unnecessary use of "use strict";
|
||||
# http://eslint.org/docs/rules/no-extra-strict
|
||||
no-extra-strict: 0
|
||||
|
||||
# controls location of Use Strict Directives
|
||||
# http://eslint.org/docs/rules/strict
|
||||
strict:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- "function"
|
||||
|
||||
#############################################################################
|
||||
# Variable declaration rules
|
||||
#############################################################################
|
||||
# Disallow the catch clause parameter name being the same as a variable in
|
||||
# the outer scope
|
||||
# http://eslint.org/docs/rules/no-catch-shadow
|
||||
no-catch-shadow: 2
|
||||
|
||||
# Disallow deletion of variables
|
||||
# http://eslint.org/docs/rules/no-delete-var
|
||||
no-delete-var: 2
|
||||
|
||||
# Disallow labels that share a name with a variable
|
||||
# http://eslint.org/docs/rules/no-label-var
|
||||
no-label-var: 2
|
||||
|
||||
# Disallow shadowing of names such as arguments
|
||||
# http://eslint.org/docs/rules/no-shadow-restricted-names
|
||||
no-shadow-restricted-names: 2
|
||||
|
||||
# Disallow declaration of variables already declared in the outer scope
|
||||
# http://eslint.org/docs/rules/no-shadow
|
||||
no-shadow: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of undefined when initializing variables
|
||||
# http://eslint.org/docs/rules/no-undef-init
|
||||
no-undef-init: 2
|
||||
|
||||
# Disallow use of undeclared variables unless mentioned in a /*global */ block
|
||||
# http://eslint.org/docs/rules/no-undef
|
||||
no-undef: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of undefined variable
|
||||
# http://eslint.org/docs/rules/no-undefined
|
||||
no-undefined: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow declaration of variables that are not used in the code
|
||||
# http://eslint.org/docs/rules/no-unused-vars
|
||||
no-unused-vars: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of variables before they are defined
|
||||
# http://eslint.org/docs/rules/no-use-before-define
|
||||
no-use-before-define: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
#############################################################################
|
||||
# Node.js rules
|
||||
#############################################################################
|
||||
|
||||
# Enforces error handling in callbacks
|
||||
# http://eslint.org/docs/rules/handle-callback-err
|
||||
handle-callback-err: 2
|
||||
|
||||
# Disallow mixing regular variable and require declarations
|
||||
# http://eslint.org/docs/rules/no-mixed-requires
|
||||
no-mixed-requires: 2
|
||||
|
||||
# Disallow use of new operator with the require function
|
||||
# http://eslint.org/docs/rules/no-new-require
|
||||
no-new-require: 2
|
||||
|
||||
# Disallow string concatenation with __dirname and __filename
|
||||
# http://eslint.org/docs/rules/no-path-concat
|
||||
no-path-concat: 2
|
||||
|
||||
# Disallow process.exit()
|
||||
# http://eslint.org/docs/rules/no-process-exit
|
||||
no-process-exit: 2
|
||||
|
||||
# Restrict usage of specified node modules
|
||||
# http://eslint.org/docs/rules/no-restricted-modules
|
||||
no-restricted-modules: 0
|
||||
|
||||
# Disallow use of synchronous methods
|
||||
# http://eslint.org/docs/rules/no-sync
|
||||
no-sync: 2
|
||||
|
||||
|
||||
#############################################################################
|
||||
# Stylistic Changes
|
||||
#############################################################################
|
||||
|
||||
# Enforce one true brace style
|
||||
# http://eslint.org/docs/rules/brace-style
|
||||
brace-style: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Require camel case names
|
||||
# http://eslint.org/docs/rules/camelcase
|
||||
camelcase:
|
||||
- 2
|
||||
- properties: "never"
|
||||
|
||||
# Enforce spacing before and after comma
|
||||
# http://eslint.org/docs/rules/comma-spacing
|
||||
comma-spacing: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Enforce one true comma style
|
||||
# http://eslint.org/docs/rules/comma-style
|
||||
comma-style: 2
|
||||
|
||||
# Enforces consistent naming when capturing the current execution context
|
||||
# http://eslint.org/docs/rules/consistent-this
|
||||
consistent-this:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- "self"
|
||||
|
||||
# Enforce newline at the end of file, with no multiple empty lines
|
||||
# http://eslint.org/docs/rules/eol-last
|
||||
eol-last: 2
|
||||
|
||||
# Require function expressions to have a name
|
||||
# http://eslint.org/docs/rules/func-names
|
||||
func-names: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Enforces use of function declarations or expressions
|
||||
# http://eslint.org/docs/rules/func-style
|
||||
func-style: 0
|
||||
|
||||
# This option sets a specific tab width for your code
|
||||
# http://eslint.org/docs/rules/indent
|
||||
indent:
|
||||
- 2 # TODO(krotscheck): Activate & Fix
|
||||
- 2
|
||||
|
||||
# Enforces spacing between keys and values in object literal properties
|
||||
# http://eslint.org/docs/rules/key-spacing
|
||||
key-spacing: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Enforces empty lines around comments
|
||||
# http://eslint.org/docs/rules/lines-around-comment
|
||||
lines-around-comment: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow mixed 'LF' and 'CRLF' as linebreaks
|
||||
# http://eslint.org/docs/rules/linebreak-style
|
||||
linebreak-style:
|
||||
- 2
|
||||
- "unix"
|
||||
|
||||
# Specify the maximum depth callbacks can be nested
|
||||
# http://eslint.org/docs/rules/max-nested-callbacks
|
||||
max-nested-callbacks:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- 3
|
||||
|
||||
# Require a capital letter for constructors
|
||||
# http://eslint.org/docs/rules/new-cap
|
||||
new-cap: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow the omission of parentheses when invoking a constructor
|
||||
# http://eslint.org/docs/rules/new-parens
|
||||
new-parens: 2
|
||||
|
||||
# allow/disallow an empty newline after var statement
|
||||
# http://eslint.org/docs/rules/newline-after-var
|
||||
newline-after-var: 0
|
||||
|
||||
# Disallow use of the Array constructor
|
||||
# http://eslint.org/docs/rules/no-array-constructor
|
||||
no-array-constructor: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow use of the continue statement
|
||||
# http://eslint.org/docs/rules/no-continue
|
||||
no-continue: 0
|
||||
|
||||
# Disallow comments inline after code
|
||||
# http://eslint.org/docs/rules/no-inline-comments
|
||||
no-inline-comments: 0
|
||||
|
||||
# disallow if as the only statement in an else block
|
||||
# http://eslint.org/docs/rules/no-lonely-if
|
||||
no-lonely-if: 0
|
||||
|
||||
# Disallow mixed spaces and tabs for indentation
|
||||
# http://eslint.org/docs/rules/no-mixed-spaces-and-tabs
|
||||
no-mixed-spaces-and-tabs: 2
|
||||
|
||||
# Disallow multiple empty lines
|
||||
# http://eslint.org/docs/rules/no-multiple-empty-lines
|
||||
no-multiple-empty-lines:
|
||||
- 2
|
||||
- max: 1
|
||||
|
||||
# Disallow nested ternary expressions
|
||||
# http://eslint.org/docs/rules/no-nested-ternary
|
||||
no-nested-ternary: 0
|
||||
|
||||
# Disallow use of the Object constructor
|
||||
# http://eslint.org/docs/rules/no-new-object
|
||||
no-new-object: 1
|
||||
|
||||
# (Deprecated) Disallow space before semicolon
|
||||
# http://eslint.org/docs/rules/no-space-before-semi
|
||||
no-space-before-semi: 0
|
||||
|
||||
# Disallow space between function identifier and application
|
||||
# http://eslint.org/docs/rules/no-spaced-func
|
||||
no-spaced-func: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow the use of ternary operators
|
||||
# http://eslint.org/docs/rules/no-ternary
|
||||
no-ternary: 0
|
||||
|
||||
# Disallow trailing whitespace at the end of lines
|
||||
# http://eslint.org/docs/rules/no-trailing-spaces
|
||||
no-trailing-spaces: 2
|
||||
|
||||
# Disallow dangling underscores in identifiers
|
||||
# http://eslint.org/docs/rules/no-underscore-dangle
|
||||
no-underscore-dangle: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow the use of Boolean literals in conditional expressions
|
||||
# http://eslint.org/docs/rules/no-unneeded-ternary
|
||||
no-unneeded-ternary: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Disallow wrapping of non-IIFE statements in parens
|
||||
# http://eslint.org/docs/rules/no-wrap-func
|
||||
no-wrap-func: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Require or disallow padding inside curly braces
|
||||
# http://eslint.org/docs/rules/object-curly-spacing
|
||||
object-curly-spacing: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Allow or disallow one variable declaration per function
|
||||
# http://eslint.org/docs/rules/one-var
|
||||
one-var:
|
||||
- 2
|
||||
- uninitialized: "always"
|
||||
initialized: "never"
|
||||
|
||||
# Prevent assignment operator shorthand where possible
|
||||
# http://eslint.org/docs/rules/operator-assignment
|
||||
operator-assignment:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- "never"
|
||||
|
||||
# Enforce operators to be placed before or after line breaks
|
||||
# http://eslint.org/docs/rules/operator-linebreak
|
||||
operator-linebreak: 2
|
||||
|
||||
# Enforce padding within blocks
|
||||
# http://eslint.org/docs/rules/padded-blocks
|
||||
padded-blocks: 0
|
||||
|
||||
# Require quotes around object literal property names
|
||||
# http://eslint.org/docs/rules/quote-props
|
||||
quote-props: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Specify whether backticks, double or single quotes should be used
|
||||
# http://eslint.org/docs/rules/quotes
|
||||
quotes:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- 'single'
|
||||
|
||||
# Enforce spacing before and after semicolons
|
||||
# http://eslint.org/docs/rules/semi-spacing
|
||||
semi-spacing: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Require or disallow use of semicolons instead of ASI
|
||||
# http://eslint.org/docs/rules/semi
|
||||
semi:
|
||||
- 2
|
||||
- 'always'
|
||||
|
||||
# Sort variables within the same declaration block
|
||||
# http://eslint.org/docs/rules/sort-vars
|
||||
sort-vars: 0
|
||||
|
||||
# (Deprecated) Require a space after function names
|
||||
# http://eslint.org/docs/rules/space-after-function-name
|
||||
space-after-function-name: 0
|
||||
|
||||
# Require a space after certain keywords
|
||||
# http://eslint.org/docs/rules/space-after-keywords
|
||||
space-after-keywords: 2
|
||||
|
||||
# require or disallow space before blocks
|
||||
# http://eslint.org/docs/rules/space-before-blocks
|
||||
space-before-blocks:
|
||||
- 2
|
||||
- "always"
|
||||
|
||||
# Require or disallow space before function opening parenthesis
|
||||
# http://eslint.org/docs/rules/space-before-function-paren
|
||||
space-before-function-paren:
|
||||
- 0 # TODO(krotscheck): Activate & Fix
|
||||
- "always"
|
||||
|
||||
# (Deprecated) Require or disallow space before function parentheses
|
||||
# http://eslint.org/docs/rules/space-before-function-parentheses
|
||||
space-before-function-parentheses: 0
|
||||
|
||||
# Require or disallow spaces inside brackets
|
||||
# http://eslint.org/docs/rules/space-in-brackets
|
||||
space-in-brackets: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# require or disallow spaces inside parentheses
|
||||
# http://eslint.org/docs/rules/space-in-parens
|
||||
space-in-parens: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# Require spaces around operators
|
||||
# http://eslint.org/docs/rules/space-infix-ops
|
||||
space-infix-ops: 2
|
||||
|
||||
# Require a space after return, throw, and case
|
||||
# http://eslint.org/docs/rules/space-return-throw-case
|
||||
space-return-throw-case: 2
|
||||
|
||||
# Require or disallow spaces before/after unary operators (words on by default, nonwords)
|
||||
# http://eslint.org/docs/rules/space-unary-ops
|
||||
space-unary-ops:
|
||||
- 2
|
||||
- words: true
|
||||
nonwords: false
|
||||
|
||||
# (deprecated) Require or disallow spaces before/after unary operators (words on by default, nonwords)
|
||||
# http://eslint.org/docs/rules/space-unary-word-ops
|
||||
space-unary-word-ops: 0
|
||||
|
||||
# Require or disallow a space immediately following the // in a line comment
|
||||
# http://eslint.org/docs/rules/spaced-line-comment
|
||||
spaced-line-comment: 0 # TODO(krotscheck): Activate & Fix
|
||||
|
||||
# require regex literals to be wrapped in parentheses
|
||||
# http://eslint.org/docs/rules/wrap-regex
|
||||
wrap-regex: 0
|
||||
|
||||
|
||||
#############################################################################
|
||||
# ECMAScript 6 (All Off)
|
||||
#############################################################################
|
||||
# enforce the spacing around the * in generator functions
|
||||
# http://eslint.org/docs/rules/generator-star-spacing
|
||||
generator-star-spacing: 0
|
||||
|
||||
# (deprecated) enforce the position of the * in generator functions
|
||||
# http://eslint.org/docs/rules/generator-star
|
||||
generator-star: 0
|
||||
|
||||
# require let or const instead of var
|
||||
# http://eslint.org/docs/rules/no-var
|
||||
no-var: 0
|
||||
|
||||
# require method and property shorthand syntax for object literals
|
||||
# http://eslint.org/docs/rules/object-shorthand
|
||||
object-shorthand: 0
|
||||
|
||||
# suggest using of const declaration for variables that are never modified after declared
|
||||
# http://eslint.org/docs/rules/prefer-const
|
||||
prefer-const: 0
|
||||
|
||||
|
||||
#############################################################################
|
||||
# Legacy
|
||||
#############################################################################
|
||||
# specify the maximum depth that blocks can be nested
|
||||
# http://eslint.org/docs/rules/max-depth
|
||||
max-depth: 0
|
||||
|
||||
# specify the maximum length of a line in your program
|
||||
# http://eslint.org/docs/rules/max-len
|
||||
max-len:
|
||||
- 2 # TODO(krotscheck): Activate & Fix
|
||||
- 100
|
||||
|
||||
# Limits the number of parameters that can be used in function declaration.
|
||||
# http://eslint.org/docs/rules/max-params
|
||||
max-params: 0
|
||||
|
||||
# Specify the maximum number of statements allowed in a function
|
||||
# http://eslint.org/docs/rules/max-statements
|
||||
max-statements: 0
|
||||
|
||||
# Disallow use of bitwise operators
|
||||
# http://eslint.org/docs/rules/no-bitwise
|
||||
no-bitwise: 0
|
||||
|
||||
# Disallow use of unary operators, ++ and --
|
||||
# http://eslint.org/docs/rules/no-plusplus
|
||||
no-plusplus: 0
|
||||
|
||||
|
||||
# We only support ECMA5, disable everything else.
|
||||
ecmaFeatures:
|
||||
arrowFunctions: false
|
||||
binaryLiterals: false
|
||||
blockBindings: false
|
||||
classes: false
|
||||
defaultParams: false
|
||||
destructuring: false
|
||||
forOf: false
|
||||
generators: false
|
||||
modules: false
|
||||
objectLiteralComputedProperties: false
|
||||
objectLiteralDuplicateProperties: false
|
||||
objectLiteralShorthandMethods: false
|
||||
objectLiteralShorthandProperties: false
|
||||
octalLiterals: false
|
||||
regexUFlag: false
|
||||
regexYFlag: false
|
||||
restParams: false
|
||||
spread: false
|
||||
superInFunctions: false
|
||||
templateStrings: false
|
||||
unicodeCodePointEscapes: false
|
||||
globalReturn: false
|
||||
jsx: false
|
58
.jscsrc
58
.jscsrc
@ -1,58 +0,0 @@
|
||||
{
|
||||
"excludeFiles": [
|
||||
".venv/**",
|
||||
"bower_components/**",
|
||||
"horizon/.coverage-karma/**",
|
||||
"lib/**",
|
||||
"node_modules/**",
|
||||
"openstack_dashboard/.coverage-karma/**"
|
||||
],
|
||||
"requireCurlyBraces": [
|
||||
"if",
|
||||
"else",
|
||||
"for",
|
||||
"while",
|
||||
"do",
|
||||
"try",
|
||||
"catch"
|
||||
],
|
||||
"requireOperatorBeforeLineBreak": true,
|
||||
"requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties",
|
||||
"maximumLineLength": {
|
||||
"value": 100,
|
||||
"allowComments": true,
|
||||
"allowRegex": true
|
||||
},
|
||||
"validateIndentation": 2,
|
||||
"disallowMultipleLineStrings": true,
|
||||
"disallowMixedSpacesAndTabs": true,
|
||||
"disallowTrailingWhitespace": true,
|
||||
"disallowSpaceAfterPrefixUnaryOperators": true,
|
||||
"disallowMultipleVarDecl": "exceptUndefined",
|
||||
"requireSpaceAfterKeywords": [
|
||||
"if",
|
||||
"else",
|
||||
"for",
|
||||
"while",
|
||||
"do",
|
||||
"switch",
|
||||
"return",
|
||||
"try",
|
||||
"catch"
|
||||
],
|
||||
"requireSpaceBeforeBinaryOperators": [
|
||||
"=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=",
|
||||
"&=", "|=", "^=", "+=",
|
||||
|
||||
"+", "-", "*", "/", "%", "<<", ">>", ">>>", "&",
|
||||
"|", "^", "&&", "||", "===", "==", ">=",
|
||||
"<=", "<", ">", "!=", "!=="
|
||||
],
|
||||
"requireSpaceAfterBinaryOperators": true,
|
||||
"requireSpacesInConditionalExpression": true,
|
||||
"requireSpaceBeforeBlockStatements": true,
|
||||
"requireLineFeedAtFileEnd": true,
|
||||
"disallowMultipleLineBreaks": true,
|
||||
"disallowTrailingComma": true,
|
||||
"requireParenthesesAroundIIFE": true
|
||||
}
|
@ -349,7 +349,7 @@ Recommended
|
||||
code review. It is best to use a formatter when you are working on a new file
|
||||
by yourself, or with others who are using the same formatter. You can also
|
||||
choose to format a selected portion of a file only. Instructions for setting
|
||||
up JSHint for Eclipse, Sublime Text, Notepad++ and WebStorm/PyCharm are
|
||||
up ESLint for Eclipse, Sublime Text, Notepad++ and WebStorm/PyCharm are
|
||||
provided_.
|
||||
* Use 2 spaces for code indentation.
|
||||
* Use ``{ }`` for ``if``, ``for``, ``while`` statements, and don't combine them
|
||||
@ -361,7 +361,7 @@ Recommended
|
||||
if(x) { if(x) if(x) y =x;
|
||||
y=x; y=x;
|
||||
}
|
||||
* Use JSHint in your development environment.
|
||||
* Use ESLint in your development environment.
|
||||
|
||||
|
||||
AngularJS
|
||||
@ -434,6 +434,32 @@ Required
|
||||
$window.gettext('translatable text');
|
||||
|
||||
|
||||
ESLint
|
||||
------
|
||||
ESLint is a great tool to be used during your code editing to improve
|
||||
JavaScript quality by checking your code against a configurable list of checks.
|
||||
Therefore, JavaScript developers should configure their editors to use ESLint
|
||||
to warn them of any such errors so they can be addressed. Since ESLint has a
|
||||
ton of configuration options to choose from, links are provided below to the
|
||||
options Horizon wants enforced along with the instructions for setting up
|
||||
ESLint for Eclipse, Sublime Text, Notepad++ and WebStorm/PyCharm.
|
||||
|
||||
ESLint configuration file: `.eslintrc`_
|
||||
|
||||
Instructions for setting up ESLint: `ESLint setup instructions`_
|
||||
|
||||
.. Note ::
|
||||
ESLint is part of the automated unit tests performed by Jenkins. The
|
||||
automated test use the default configurations, which are less strict than
|
||||
the configurations we recommended to run in your local development
|
||||
environment.
|
||||
|
||||
.. _.eslintrc: https://wiki.openstack.org/wiki/Horizon/Javascript/EditorConfig/Settings#.eslintrc
|
||||
.. _ESLint setup instructions: https://wiki.openstack.org/wiki/Horizon/Javascript/EditorConfig
|
||||
.. _provided: https://wiki.openstack.org/wiki/Horizon/Javascript/EditorConfig
|
||||
|
||||
|
||||
|
||||
CSS
|
||||
---
|
||||
|
||||
|
@ -134,20 +134,51 @@ Available options:
|
||||
the dashboard module's directory structure. Default: A new directory within
|
||||
the current directory.
|
||||
|
||||
JavaScript
|
||||
----------
|
||||
JavaScript Tests
|
||||
----------------
|
||||
|
||||
You can also run JavaScript unit tests using Karma. Karma is a test
|
||||
environment that allows for multiple test runners and reporters, including
|
||||
such features as code coverage. Karma allows developer to run tests live,
|
||||
as it can watch source and test files for changes.
|
||||
|
||||
To run the Karma tests for Horizon and Dashboard::
|
||||
The default configuration also performs coverage reports, which are saved
|
||||
to ``horizon/.coverage-karma/`` and ``openstack_dashboard/.coverage-karma/``.
|
||||
|
||||
To run the Karma tests for Horizon and Dashboard using the `run_tests.sh`
|
||||
script::
|
||||
|
||||
./run_tests.sh --karma
|
||||
|
||||
The default configuration also performs coverage reports, which are saved
|
||||
to ``horizon/.coverage-karma/`` and ``openstack_dashboard/.coverage-karma/``.
|
||||
To run the Karma tests for Horizon and Dashboard using `npm`::
|
||||
|
||||
npm install # You only need to execute this once.
|
||||
npm test
|
||||
|
||||
.. note:: These two methods are equivalent. The former merely executes
|
||||
the latter.
|
||||
|
||||
|
||||
JavaScript Code Style Checks
|
||||
----------------------------
|
||||
|
||||
You can run the JavaScript code style checks, or linting, using eslint.
|
||||
ESLint is a permissively licensed, sophisticated language parser and
|
||||
linter that confirms both our style guidelines, and checks the code for
|
||||
common errors that may create unexpected behavior.
|
||||
|
||||
To run eslint for Horizon and Dashboard using the `run_tests.sh`
|
||||
script::
|
||||
|
||||
./run_tests.sh --karma
|
||||
|
||||
To run eslint for Horizon and Dashboard using `npm`::
|
||||
|
||||
npm install # You only need to execute this once.
|
||||
npm run lint
|
||||
|
||||
.. note:: These two methods are equivalent. The former merely executes
|
||||
the latter.
|
||||
|
||||
Give me metrics!
|
||||
================
|
||||
@ -155,12 +186,12 @@ Give me metrics!
|
||||
You can generate various reports and metrics using command line arguments
|
||||
to ``run_tests.sh``.
|
||||
|
||||
JSCS
|
||||
ESLint
|
||||
----
|
||||
|
||||
To run JSCS, a JavaScript code style checker::
|
||||
To run ESLint, a JavaScript code style checker::
|
||||
|
||||
./run_tests.sh --jscs
|
||||
./run_tests.sh --eslint
|
||||
|
||||
Coverage
|
||||
--------
|
||||
|
@ -45,9 +45,9 @@
|
||||
.constant('horizon.framework.widgets.action-list.tooltipConfig', {
|
||||
defaultTemplate: '<div>{$ ::message $}</div>',
|
||||
defaultMessage: {
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
message: gettext('The action cannot be performed. The contents of this row have errors or are missing information.')
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
@ -214,9 +214,9 @@
|
||||
expect($magicScope.strings.prompt).toBe('');
|
||||
});
|
||||
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
it('should call resetState, initFacets and emit checkFacets on removeFacet when facet selected',
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
function () {
|
||||
var initialSearch = {
|
||||
name: 'name=myname',
|
||||
|
@ -32,9 +32,9 @@
|
||||
*/
|
||||
.constant('horizon.framework.widgets.metadata-tree.defaults', {
|
||||
text: {
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
help: gettext('You can specify resource metadata by moving items from the left column to the right column. In the left columns there are metadata definitions from the Glance Metadata Catalog. Use the "Other" option to add metadata with the key of your choice.'),
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
min: gettext('Min'),
|
||||
max: gettext('Max'),
|
||||
minLength: gettext('Min length'),
|
||||
|
@ -54,7 +54,7 @@
|
||||
displayedAllocated: []
|
||||
};
|
||||
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var markup = '<transfer-table tr-model="tableData">' +
|
||||
'<allocated>' +
|
||||
'<table st-table="tableData.displayedAllocated" st-safe-src="tableData.allocated" hz-table>' +
|
||||
@ -81,7 +81,7 @@
|
||||
'</table>' +
|
||||
'</available>' +
|
||||
'</transfer-table>';
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
$element = angular.element(markup);
|
||||
$compile($element)($scope);
|
||||
@ -153,7 +153,7 @@
|
||||
maxAllocation: 2
|
||||
};
|
||||
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var markup = '<transfer-table tr-model="tableData" limits="limits">' +
|
||||
'<available>' +
|
||||
'<table st-table="tableData.available" hz-table>' +
|
||||
@ -180,7 +180,7 @@
|
||||
'</table>' +
|
||||
'</allocated>' +
|
||||
'</transfer-table>';
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
$element = angular.element(markup);
|
||||
$compile($element)($scope);
|
||||
|
@ -32,7 +32,7 @@
|
||||
|
||||
ctrl.title = gettext('Configuration Help');
|
||||
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var customScriptMap = { cloutInit: 'cloud-init' };
|
||||
var customScriptText = gettext('Custom scripts are attached to instances to perform specific actions when the instance is launched. For example, if you are unable to install <samp>%(cloutInit)s</samp> inside a guest operating system, you can use a custom script to get a public key and add it to the user account.');
|
||||
|
||||
@ -42,6 +42,6 @@
|
||||
gettext('An advanced option available when launching an instance is disk partitioning. There are two disk partition options. Selecting <b>Automatic</b> resizes the disk and sets it to a single partition. Selecting <b>Manual</b> allows you to create multiple partitions on the disk.'),
|
||||
gettext('Check the <b>Configuration Drive</b> box if you want to write metadata to a special configuration drive. When the instance boots, it attaches to the <b>Configuration Drive</b> and accesses the metadata.')
|
||||
];
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
}
|
||||
})();
|
||||
|
@ -26,11 +26,11 @@
|
||||
ctrl.title = gettext('Flavor Help');
|
||||
|
||||
ctrl.paragraphs = [
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
gettext('The flavor you select for an instance determines the amount of compute, storage and memory resources that will be carved out for the instance.'),
|
||||
gettext('The flavor you select must have enough resources allocated to support the type of instance you are trying to create. Flavors that don\'t provide enough resources for your instance are identified on the <b>Available</b> table with a yellow warning icon.'),
|
||||
gettext('Administrators are responsible for creating and managing flavors. A custom flavor can be created for you or for a specific project where it is shared with the users assigned to that project. If you need a custom flavor, contact your administrator.')
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -271,9 +271,9 @@
|
||||
var availableRam = maxTotalRam - totalRamUsed;
|
||||
var ramRequired = instanceCount * flavor.ram;
|
||||
if (ramRequired > availableRam) {
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
messages.ram = gettext('This flavor requires more RAM than your quota allows. Please select a smaller flavor or decrease the instance count.');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
}
|
||||
|
||||
// Check VCPU resources
|
||||
@ -284,18 +284,18 @@
|
||||
var availableCores = maxTotalCores - totalCoresUsed;
|
||||
var coresRequired = instanceCount * flavor.vcpus;
|
||||
if (coresRequired > availableCores) {
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
messages.vcpus = gettext('This flavor requires more VCPUs than your quota allows. Please select a smaller flavor or decrease the instance count.');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
}
|
||||
|
||||
// Check source minimum requirements against this flavor
|
||||
var sourceType = launchInstanceModel.newInstanceSpec.source_type;
|
||||
if (source && sourceType && sourceType.type === 'image') {
|
||||
if (source.min_disk > 0 && source.min_disk > flavor.disk) {
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var srcMinDiskMsg = gettext('The selected image source requires a flavor with at least %(minDisk)s GB of root disk. Select a flavor with a larger root disk or use a different image source.');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
messages.disk = interpolate(
|
||||
srcMinDiskMsg,
|
||||
{ minDisk: source.min_disk },
|
||||
@ -303,9 +303,9 @@
|
||||
);
|
||||
}
|
||||
if (source.min_ram > 0 && source.min_ram > flavor.ram) {
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var srcMinRamMsg = gettext('The selected image source requires a flavor with at least %(minRam)s MB of RAM. Select a flavor with more RAM or use a different image source.');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
messages.ram = interpolate(
|
||||
srcMinRamMsg,
|
||||
{ minRam: source.min_ram },
|
||||
|
@ -23,9 +23,9 @@
|
||||
|
||||
ctrl.label = {
|
||||
title: gettext('Key Pair'),
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
subtitle: gettext('A key pair allows you to SSH into your newly created instance. You may select an existing key pair, import a key pair, or generate a new key pair.'),
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
name: gettext('Name'),
|
||||
description: gettext('Description'),
|
||||
createKeyPair: gettext('Create Key Pair'),
|
||||
@ -124,23 +124,23 @@
|
||||
ctrl.title = gettext('Key Pair Help');
|
||||
|
||||
var genKeyPairsMap = {genKeyPairCmd: 'ssh-keygen'};
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var genKeyPairsText = gettext('There are two ways to generate a key pair. From a Linux system, generate the key pair with the <samp>%(genKeyPairCmd)s</samp> command:');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
var keyPathsMap = {
|
||||
privateKeyPath: 'cloud.key',
|
||||
publicKeyPath: 'cloud.key.pub'
|
||||
};
|
||||
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var keyPathText = gettext('This command generates a pair of keys: a private key (%(privateKeyPath)s) and a public key (%(publicKeyPath)s).');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
var windowsCmdMap = {authorizeKeysFile: '.ssh/authorized_keys'};
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var windowsCmd = gettext('From a Windows system, you can use PuTTYGen to create private/public keys. Use the PuTTY Key Generator to create and save the keys, then copy the public key in the red highlighted box to your <samp>%(authorizeKeysFile)s</samp> file.');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
ctrl.paragraphs = [
|
||||
gettext('The key pair allows you to SSH into the instance.'),
|
||||
@ -170,9 +170,9 @@
|
||||
ctrl.labels = {
|
||||
wizardTitle: gettext('Launch Instance'),
|
||||
title: gettext('Create Key Pair'),
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
help: gettext('Key Pairs are how you login to your instance after it is launched. Choose a key pair name you will recognize.'),
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
keyPairName: gettext('Key Pair Name'),
|
||||
cancel: gettext('Cancel'),
|
||||
ok: gettext('Create Key Pair'),
|
||||
@ -246,9 +246,9 @@
|
||||
ctrl.labels = {
|
||||
wizardTitle: gettext('Launch Instance'),
|
||||
title: gettext('Import Key Pair'),
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
help: gettext('Key Pairs are how you login to your instance after it is launched. Choose a key pair name you will recognize and paste your SSH public key into the space provided.'),
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
keyPairName: gettext('Key Pair Name'),
|
||||
publicKey: gettext('Public Key'),
|
||||
cancel: gettext('Cancel'),
|
||||
@ -289,19 +289,19 @@
|
||||
ctrl.title = gettext('Import Key Pair Help');
|
||||
|
||||
var genKeyPairsMap = { genKeyPairCmd: 'ssh-keygen' };
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var genKeyPairsText = gettext('There are two ways to generate a key pair. From a Linux system, generate the key pair with the <samp>%(genKeyPairCmd)s</samp> command:');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
var keyPathsMap = { privateKeyPath: 'cloud.key', publicKeyPath: 'cloud.key.pub' };
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var keyPathText = gettext('This command generates a pair of keys: a private key (%(privateKeyPath)s) and a public key (%(publicKeyPath)s).');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
var windowsCmdMap = { authorizeKeysFile: '.ssh/authorized_keys' };
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
var windowsCmd = gettext('From a Windows system, you can use PuTTYGen to create private/public keys. Use the PuTTY Key Generator to create and save the keys, then copy the public key in the red highlighted box to your <samp>%(authorizeKeysFile)s</samp> file.');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
|
||||
ctrl.paragraphs = [
|
||||
interpolate(genKeyPairsText, genKeyPairsMap, true),
|
||||
|
@ -32,22 +32,22 @@
|
||||
ctrl.title = gettext('Network Help');
|
||||
|
||||
ctrl.paragraphs = [
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
gettext('Provider networks are created by administrators. These networks map to an existing physical network in the data center.'),
|
||||
gettext('Project networks are created by users. These networks are fully isolated and are project-specific.'),
|
||||
gettext('An <b>External</b> network is set up by an administrator. If you want an instance to communicate outside of the data center, then attach a router between your <b>Project</b> network and the <b>External</b> network. You can use the <b>Network Topology</b> view to connect the router to the two networks.'),
|
||||
gettext('A floating IP allows instances to be addressable from an external network. Floating IPs are not allocated to instances at creation time and may be assigned after the instance is created. To attach a floating IP, go to the <b>Instances</b> view and click the <b>Actions</b> menu to the right of an instance. Then, select the <b>Associate Floating IP</b> option and enter the necessary details.'),
|
||||
gettext('Administrators set up the pool of floating IPs that are available to attach to instances.')
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
];
|
||||
|
||||
ctrl.networkCharTitle = gettext('Network characteristics');
|
||||
ctrl.networkCharParagraphs = [
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
gettext('The subnet identifies a sub-section of a network. A subnet is specified in CIDR format. A typical CIDR format looks like <samp>192.xxx.x.x/24</samp>.'),
|
||||
gettext('If a network is shared, then all users in the project can access the network.'),
|
||||
gettext('When the <b>Admin State</b> for a network is set to <b>Up</b>, then the network is available for use. You can set the <b>Admin State</b> to <b>Down</b> if you are not ready for other users to access the network.'),
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
gettext('The status indicates whether the network has an active connection.')
|
||||
];
|
||||
}
|
||||
|
@ -65,13 +65,11 @@
|
||||
ctrl.title = gettext('Security Groups Help');
|
||||
|
||||
ctrl.paragraphs = [
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
gettext('Security groups define a set of IP filter rules that determine how network traffic flows to and from an instance. Users can add additional rules to an existing security group to further define the access options for an instance. To create additional rules, go to the <b>Compute | Access & Security</b> view, then find the security group and click <b>Manage Rules</b>.'),
|
||||
// jscs:enable maximumLineLength
|
||||
gettext('Security groups are project-specific and cannot be shared across projects.'),
|
||||
// jscs:disable maximumLineLength
|
||||
gettext('If a security group is not associated with an instance before it is launched, then you will have very limited access to the instance after it is deployed. You will only be able to access the instance from a VNC console.')
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
];
|
||||
}
|
||||
]);
|
||||
|
@ -33,15 +33,15 @@
|
||||
|
||||
ctrl.instanceDetailsTitle = gettext('Instance Details');
|
||||
ctrl.instanceDetailsParagraphs = [
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
gettext('An instance name is required and used to help you uniquely identify your instance in the dashboard.'),
|
||||
gettext('If you select an availability zone and plan to use the boot from volume option, make sure that the availability zone you select for the instance is the same availability zone where your bootable volume resides.')
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
];
|
||||
|
||||
ctrl.instanceSourceTitle = gettext('Instance Source');
|
||||
ctrl.instanceSourceParagraphs = [
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
gettext('If you want to create an instance that uses ephemeral storage, meaning the instance data is lost when the instance is deleted, then choose one of the following boot sources:'),
|
||||
gettext('<li><b>Image</b>: This option uses an image to boot the instance.</li>'),
|
||||
gettext('<li><b>Instance Snapshot</b>: This option uses an instance snapshot to boot the instance.</li>'),
|
||||
@ -49,7 +49,7 @@
|
||||
gettext('<li><b>Image (with Create New Volume checked)</b>: This options uses an image to boot the instance, and creates a new volume to persist instance data. You can specify volume size and whether to delete the volume on termination of the instance.</li>'),
|
||||
gettext('<li><b>Volume</b>: This option uses a volume that already exists. It does not create a new volume. You can choose to delete the volume on termination of the instance. <em>Note: when selecting Volume, you can only launch one instance.</em></li>'),
|
||||
gettext('<li><b>Volume Snapshot</b>: This option uses a volume snapshot to boot the instance, and creates a new volume to persist instance data. You can choose to delete the volume on termination of the instance.</li>')
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
];
|
||||
}
|
||||
})();
|
||||
|
@ -55,15 +55,16 @@
|
||||
var ctrl = this;
|
||||
ctrl.label = {
|
||||
title: gettext('Instance Details'),
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
subtitle: gettext('Please provide the initial host name for the instance, the availability zone where it will be deployed, and the instance count. Increase the Count to create multiple instances with the same settings.'),
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
instanceName: gettext('Instance Name'),
|
||||
availabilityZone: gettext('Availability Zone'),
|
||||
instance_count: gettext('Count'),
|
||||
instanceSourceTitle: gettext('Instance Source'),
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
instanceSourceSubTitle: gettext('Instance source is the template used to create an instance. You can use a snapshot of an existing instance, an image, or a volume (if enabled). You can also choose to use persistent storage by creating a new volume.'),
|
||||
/*eslint-enable max-len */
|
||||
bootSource: gettext('Select Boot Source'),
|
||||
volumeSize: gettext('Size (GB)'),
|
||||
volumeCreate: gettext('Create New Volume'),
|
||||
@ -75,9 +76,9 @@
|
||||
};
|
||||
|
||||
// Error text for invalid fields
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
ctrl.bootSourceTypeError = gettext('Volumes can only be attached to 1 active instance at a time. Please either set your instance count to 1 or select a different source type.');
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
ctrl.instanceNameError = gettext('A name is required for your instance.');
|
||||
ctrl.instanceCountError = gettext(
|
||||
'Instance count is required and must be an integer of at least 1'
|
||||
@ -355,9 +356,9 @@
|
||||
angular.extend(ctrl.helpText, {
|
||||
noneAllocText: gettext('Select a source from those listed below.'),
|
||||
availHelpText: gettext('Select one'),
|
||||
// jscs:disable maximumLineLength
|
||||
/*eslint-disable max-len */
|
||||
volumeAZHelpText: gettext('When selecting volume as boot source, please ensure the instance\'s availability zone is compatible with your volume\'s availability zone.')
|
||||
// jscs:enable maximumLineLength
|
||||
/*eslint-enable max-len */
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -6,8 +6,9 @@
|
||||
"repository": "none",
|
||||
"license": "Apache 2.0",
|
||||
"devDependencies": {
|
||||
"eslint": "^0.23.0",
|
||||
"eslint-plugin-angular": "0.0.10",
|
||||
"jasmine-core": "2.2.0",
|
||||
"jscs": "1.13.1",
|
||||
"karma": "0.12.31",
|
||||
"karma-chrome-launcher": "0.1.8",
|
||||
"karma-cli": "0.0.4",
|
||||
@ -20,7 +21,7 @@
|
||||
"scripts": {
|
||||
"postinstall": "if [ ! -d .venv ]; then tox -epy27 --notest; fi",
|
||||
"test": "karma start horizon/karma.conf.js --single-run && karma start openstack_dashboard/karma.conf.js --single-run",
|
||||
"lint": "jscs --no-colors horizon/static/horizon/js horizon/static/horizon/tests horizon/static/framework/ openstack_dashboard/static/dashboard/"
|
||||
"lint": "eslint --no-color horizon/static openstack_dashboard/static"
|
||||
},
|
||||
"dependencies": {}
|
||||
}
|
||||
|
24
run_tests.sh
24
run_tests.sh
@ -27,7 +27,7 @@ function usage {
|
||||
echo " -t, --tabs Check for tab characters in files."
|
||||
echo " -y, --pylint Just run pylint"
|
||||
echo " -j, --jshint Just run jshint"
|
||||
echo " -s, --jscs Just run jscs"
|
||||
echo " -e, --eslint Just run eslint"
|
||||
echo " -k, --karma Just run karma"
|
||||
echo " -q, --quiet Run non-interactively. (Relatively) quiet."
|
||||
echo " Implies -V if -N is not set."
|
||||
@ -71,7 +71,7 @@ no_pep8=0
|
||||
just_pylint=0
|
||||
just_docs=0
|
||||
just_tabs=0
|
||||
just_jscs=0
|
||||
just_eslint=0
|
||||
just_jshint=0
|
||||
just_karma=0
|
||||
never_venv=0
|
||||
@ -110,7 +110,7 @@ function process_option {
|
||||
-P|--no-pep8) no_pep8=1;;
|
||||
-y|--pylint) just_pylint=1;;
|
||||
-j|--jshint) just_jshint=1;;
|
||||
-s|--jscs) just_jscs=1;;
|
||||
-e|--eslint) just_eslint=1;;
|
||||
-k|--karma) just_karma=1;;
|
||||
-f|--force) force=1;;
|
||||
-t|--tabs) just_tabs=1;;
|
||||
@ -167,13 +167,13 @@ function run_jshint {
|
||||
jshint openstack_dashboard/static/dashboard/
|
||||
}
|
||||
|
||||
function run_jscs {
|
||||
echo "Running jscs ..."
|
||||
if [ "`which jscs`" == '' ] ; then
|
||||
echo "jscs is not present; please install, e.g. sudo npm install jscs -g"
|
||||
function run_eslint {
|
||||
echo "Running eslint ..."
|
||||
if [ "`which npm`" == '' ] ; then
|
||||
echo "npm is not present; please install, e.g. sudo apt-get install npm"
|
||||
else
|
||||
jscs horizon/static/horizon/js horizon/static/horizon/tests \
|
||||
horizon/static/framework/ openstack_dashboard/static/dashboard/
|
||||
npm install
|
||||
npm run lint
|
||||
fi
|
||||
}
|
||||
|
||||
@ -589,9 +589,9 @@ if [ $just_jshint -eq 1 ]; then
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Jscs
|
||||
if [ $just_jscs -eq 1 ]; then
|
||||
run_jscs
|
||||
# ESLint
|
||||
if [ $just_eslint -eq 1 ]; then
|
||||
run_eslint
|
||||
exit $?
|
||||
fi
|
||||
|
||||
|
6
tox.ini
6
tox.ini
@ -50,11 +50,11 @@ commands = nodeenv -p
|
||||
npm install jshint -g
|
||||
/bin/bash run_tests.sh -N --jshint
|
||||
|
||||
[testenv:jscs]
|
||||
[testenv:eslint]
|
||||
passenv = *
|
||||
commands = nodeenv -p
|
||||
npm install jscs -g
|
||||
/bin/bash run_tests.sh -N --jscs
|
||||
npm install
|
||||
/bin/bash run_tests.sh -N --eslint
|
||||
|
||||
[testenv:docs]
|
||||
setenv = DJANGO_SETTINGS_MODULE=openstack_dashboard.test.settings
|
||||
|
Loading…
Reference in New Issue
Block a user