This repository was archived by the owner on Mar 23, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 509
/
Copy pathdisallow-semicolons.js
82 lines (70 loc) · 1.57 KB
/
disallow-semicolons.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
* Disallows lines from ending in a semicolon.
*
* Type: `Boolean`
*
* Value: `true`
*
* #### Example
*
* ```js
* "disallowSemicolons": true
* ```
*
* ##### Valid
*
* ```js
* var a = 1
* ;[b].forEach(c)
* ```
*
* ##### Invalid
*
* ```js
* var a = 1;
* [b].forEach(c);
* ```
*/
var assert = require('assert');
var nodeExceptions = {
ForStatement: true
};
var tokenExceptions = {
'[': true,
'(': true
};
module.exports = function() {};
module.exports.prototype = {
configure: function(options) {
assert(
options === true,
this.getOptionName() + ' option requires a true value or should be removed'
);
},
getOptionName: function() {
return 'disallowSemicolons';
},
check: function(file, errors) {
file.iterateTokensByTypeAndValue('Punctuator', ';', function(token) {
var nextToken = file.getNextToken(token);
var node = token.parentElement;
// Ignore node exceptions
if (node.type in nodeExceptions) {
return;
}
// Ignore next token exceptions
if (nextToken.value in tokenExceptions) {
return;
}
if (nextToken.type === 'EOF' || !file.isOnTheSameLine(token, nextToken)) {
errors.cast({
message: 'semicolons are disallowed at the end of a line.',
element: token
});
}
});
},
_fix: function(file, error) {
error.element.remove();
}
};