UNPKG

1.91 kBJavaScriptView Raw
1/**
2 * Requires sticking unary operators to the left.
3 *
4 * Types: `Array` or `Boolean`
5 *
6 * Values: Array of quoted operators or `true` to disallow space before postfix for all unary operators
7 * (i.e. increment/decrement operators)
8 *
9 * #### Example
10 *
11 * ```js
12 * "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"]
13 * ```
14 *
15 * ##### Valid
16 *
17 * ```js
18 * x = y++; y = z--;
19 * ```
20 *
21 * ##### Invalid
22 *
23 * ```js
24 * x = y ++; y = z --;
25 * ```
26 */
27
28var assert = require('assert');
29var defaultOperators = require('../utils').incrementAndDecrementOperators;
30
31module.exports = function() {};
32
33module.exports.prototype = {
34
35 configure: function(operators) {
36 var isTrue = operators === true;
37
38 assert(
39 Array.isArray(operators) || isTrue,
40 this.getOptionName() + ' option requires array or true value'
41 );
42
43 if (isTrue) {
44 operators = defaultOperators;
45 }
46
47 this._operatorIndex = {};
48 for (var i = 0, l = operators.length; i < l; i++) {
49 this._operatorIndex[operators[i]] = true;
50 }
51 },
52
53 getOptionName: function() {
54 return 'disallowSpaceBeforePostfixUnaryOperators';
55 },
56
57 check: function(file, errors) {
58 var operatorIndex = this._operatorIndex;
59
60 // 'UpdateExpression' involve only ++ and -- operators
61 file.iterateNodesByType('UpdateExpression', function(node) {
62 // "!node.prefix" means postfix type of (inc|dec)rement
63 if (!node.prefix && operatorIndex[node.operator]) {
64 var operatorToken = file.getLastNodeToken(node);
65 errors.assert.noWhitespaceBetween({
66 token: file.getPrevToken(operatorToken),
67 nextToken: operatorToken,
68 message: 'Operator ' + node.operator + ' should stick to operand'
69 });
70 }
71 });
72 }
73};