eslint 0.22.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +111 -95
  3. package/bin/eslint.js +41 -41
  4. package/conf/environments.js +87 -81
  5. package/conf/eslint.json +186 -179
  6. package/lib/api.js +13 -12
  7. package/lib/cli-engine.js +441 -451
  8. package/lib/cli.js +196 -196
  9. package/lib/config-initializer.js +145 -145
  10. package/lib/config-validator.js +110 -110
  11. package/lib/config.js +428 -416
  12. package/lib/eslint.js +1072 -1073
  13. package/lib/file-finder.js +167 -167
  14. package/lib/formatters/checkstyle.js +68 -68
  15. package/lib/formatters/compact.js +53 -53
  16. package/lib/formatters/jslint-xml.js +40 -40
  17. package/lib/formatters/junit.js +63 -63
  18. package/lib/formatters/stylish.js +90 -90
  19. package/lib/formatters/tap.js +86 -86
  20. package/lib/ignored-paths.js +137 -137
  21. package/lib/load-rules.js +39 -39
  22. package/lib/options.js +132 -126
  23. package/lib/rule-context.js +107 -107
  24. package/lib/rules/accessor-pairs.js +65 -65
  25. package/lib/rules/array-bracket-spacing.js +180 -0
  26. package/lib/rules/block-scoped-var.js +339 -320
  27. package/lib/rules/brace-style.js +228 -228
  28. package/lib/rules/camelcase.js +111 -111
  29. package/lib/rules/comma-dangle.js +67 -64
  30. package/lib/rules/comma-spacing.js +191 -191
  31. package/lib/rules/comma-style.js +195 -195
  32. package/lib/rules/complexity.js +94 -94
  33. package/lib/rules/computed-property-spacing.js +144 -0
  34. package/lib/rules/consistent-return.js +75 -75
  35. package/lib/rules/consistent-this.js +119 -119
  36. package/lib/rules/constructor-super.js +108 -0
  37. package/lib/rules/curly.js +109 -109
  38. package/lib/rules/default-case.js +66 -66
  39. package/lib/rules/dot-location.js +63 -63
  40. package/lib/rules/dot-notation.js +119 -119
  41. package/lib/rules/eol-last.js +38 -38
  42. package/lib/rules/eqeqeq.js +96 -96
  43. package/lib/rules/func-names.js +45 -45
  44. package/lib/rules/func-style.js +49 -49
  45. package/lib/rules/generator-star-spacing.js +104 -87
  46. package/lib/rules/generator-star.js +76 -76
  47. package/lib/rules/global-strict.js +49 -49
  48. package/lib/rules/guard-for-in.js +32 -32
  49. package/lib/rules/handle-callback-err.js +81 -124
  50. package/lib/rules/indent.js +486 -486
  51. package/lib/rules/key-spacing.js +325 -325
  52. package/lib/rules/linebreak-style.js +44 -44
  53. package/lib/rules/lines-around-comment.js +228 -160
  54. package/lib/rules/max-depth.js +89 -89
  55. package/lib/rules/max-len.js +76 -76
  56. package/lib/rules/max-nested-callbacks.js +73 -73
  57. package/lib/rules/max-params.js +45 -45
  58. package/lib/rules/max-statements.js +61 -61
  59. package/lib/rules/new-cap.js +224 -224
  60. package/lib/rules/new-parens.js +29 -29
  61. package/lib/rules/newline-after-var.js +127 -127
  62. package/lib/rules/no-alert.js +153 -153
  63. package/lib/rules/no-array-constructor.js +31 -31
  64. package/lib/rules/no-bitwise.js +57 -57
  65. package/lib/rules/no-caller.js +29 -29
  66. package/lib/rules/no-catch-shadow.js +52 -52
  67. package/lib/rules/no-comma-dangle.js +45 -45
  68. package/lib/rules/no-cond-assign.js +123 -123
  69. package/lib/rules/no-console.js +27 -27
  70. package/lib/rules/no-constant-condition.js +73 -73
  71. package/lib/rules/no-continue.js +23 -23
  72. package/lib/rules/no-control-regex.js +58 -58
  73. package/lib/rules/no-debugger.js +22 -22
  74. package/lib/rules/no-delete-var.js +25 -25
  75. package/lib/rules/no-div-regex.js +27 -27
  76. package/lib/rules/no-dupe-args.js +89 -85
  77. package/lib/rules/no-dupe-keys.js +43 -43
  78. package/lib/rules/no-duplicate-case.js +67 -67
  79. package/lib/rules/no-else-return.js +125 -125
  80. package/lib/rules/no-empty-character-class.js +43 -43
  81. package/lib/rules/no-empty-class.js +45 -45
  82. package/lib/rules/no-empty-label.js +27 -27
  83. package/lib/rules/no-empty.js +49 -49
  84. package/lib/rules/no-eq-null.js +29 -29
  85. package/lib/rules/no-eval.js +26 -26
  86. package/lib/rules/no-ex-assign.js +42 -42
  87. package/lib/rules/no-extend-native.js +103 -103
  88. package/lib/rules/no-extra-bind.js +81 -81
  89. package/lib/rules/no-extra-boolean-cast.js +71 -71
  90. package/lib/rules/no-extra-parens.js +368 -355
  91. package/lib/rules/no-extra-semi.js +70 -23
  92. package/lib/rules/no-extra-strict.js +86 -86
  93. package/lib/rules/no-fallthrough.js +97 -97
  94. package/lib/rules/no-floating-decimal.js +30 -30
  95. package/lib/rules/no-func-assign.js +83 -83
  96. package/lib/rules/no-implied-eval.js +76 -76
  97. package/lib/rules/no-inline-comments.js +49 -49
  98. package/lib/rules/no-inner-declarations.js +78 -78
  99. package/lib/rules/no-invalid-regexp.js +53 -53
  100. package/lib/rules/no-irregular-whitespace.js +135 -135
  101. package/lib/rules/no-iterator.js +28 -28
  102. package/lib/rules/no-label-var.js +64 -64
  103. package/lib/rules/no-labels.js +44 -44
  104. package/lib/rules/no-lone-blocks.js +106 -27
  105. package/lib/rules/no-lonely-if.js +30 -30
  106. package/lib/rules/no-loop-func.js +58 -58
  107. package/lib/rules/no-mixed-requires.js +165 -165
  108. package/lib/rules/no-mixed-spaces-and-tabs.js +74 -74
  109. package/lib/rules/no-multi-spaces.js +119 -119
  110. package/lib/rules/no-multi-str.js +43 -43
  111. package/lib/rules/no-multiple-empty-lines.js +98 -98
  112. package/lib/rules/no-native-reassign.js +62 -62
  113. package/lib/rules/no-negated-in-lhs.js +25 -25
  114. package/lib/rules/no-nested-ternary.js +24 -24
  115. package/lib/rules/no-new-func.js +25 -25
  116. package/lib/rules/no-new-object.js +25 -25
  117. package/lib/rules/no-new-require.js +25 -25
  118. package/lib/rules/no-new-wrappers.js +26 -26
  119. package/lib/rules/no-new.js +27 -27
  120. package/lib/rules/no-obj-calls.js +28 -28
  121. package/lib/rules/no-octal-escape.js +39 -39
  122. package/lib/rules/no-octal.js +25 -25
  123. package/lib/rules/no-param-reassign.js +87 -87
  124. package/lib/rules/no-path-concat.js +39 -39
  125. package/lib/rules/no-plusplus.js +24 -24
  126. package/lib/rules/no-process-env.js +30 -30
  127. package/lib/rules/no-process-exit.js +33 -33
  128. package/lib/rules/no-proto.js +28 -28
  129. package/lib/rules/no-redeclare.js +68 -68
  130. package/lib/rules/no-regex-spaces.js +35 -35
  131. package/lib/rules/no-reserved-keys.js +56 -56
  132. package/lib/rules/no-restricted-modules.js +85 -85
  133. package/lib/rules/no-return-assign.js +53 -24
  134. package/lib/rules/no-script-url.js +34 -34
  135. package/lib/rules/no-self-compare.js +29 -29
  136. package/lib/rules/no-sequences.js +94 -94
  137. package/lib/rules/no-shadow-restricted-names.js +51 -51
  138. package/lib/rules/no-shadow.js +181 -136
  139. package/lib/rules/no-space-before-semi.js +98 -98
  140. package/lib/rules/no-spaced-func.js +37 -37
  141. package/lib/rules/no-sparse-arrays.js +33 -33
  142. package/lib/rules/no-sync.js +30 -30
  143. package/lib/rules/no-ternary.js +24 -24
  144. package/lib/rules/no-this-before-super.js +144 -0
  145. package/lib/rules/no-throw-literal.js +33 -33
  146. package/lib/rules/no-trailing-spaces.js +74 -63
  147. package/lib/rules/no-undef-init.js +28 -28
  148. package/lib/rules/no-undef.js +92 -92
  149. package/lib/rules/no-undefined.js +27 -27
  150. package/lib/rules/no-underscore-dangle.js +73 -73
  151. package/lib/rules/no-unexpected-multiline.js +58 -0
  152. package/lib/rules/no-unneeded-ternary.js +48 -48
  153. package/lib/rules/no-unreachable.js +98 -98
  154. package/lib/rules/no-unused-expressions.js +76 -76
  155. package/lib/rules/no-unused-vars.js +252 -250
  156. package/lib/rules/no-use-before-define.js +105 -105
  157. package/lib/rules/no-var.js +26 -26
  158. package/lib/rules/no-void.js +28 -28
  159. package/lib/rules/no-warning-comments.js +102 -102
  160. package/lib/rules/no-with.js +22 -22
  161. package/lib/rules/no-wrap-func.js +65 -65
  162. package/lib/rules/object-curly-spacing.js +231 -206
  163. package/lib/rules/object-shorthand.js +74 -73
  164. package/lib/rules/one-var.js +311 -304
  165. package/lib/rules/operator-assignment.js +118 -118
  166. package/lib/rules/operator-linebreak.js +114 -114
  167. package/lib/rules/padded-blocks.js +98 -98
  168. package/lib/rules/prefer-const.js +91 -0
  169. package/lib/rules/quote-props.js +72 -72
  170. package/lib/rules/quotes.js +92 -92
  171. package/lib/rules/radix.js +41 -41
  172. package/lib/rules/semi-spacing.js +167 -167
  173. package/lib/rules/semi.js +136 -136
  174. package/lib/rules/sort-vars.js +49 -49
  175. package/lib/rules/space-after-function-name.js +49 -49
  176. package/lib/rules/space-after-keywords.js +82 -82
  177. package/lib/rules/space-before-blocks.js +91 -91
  178. package/lib/rules/space-before-function-paren.js +139 -139
  179. package/lib/rules/space-before-function-parentheses.js +139 -139
  180. package/lib/rules/space-in-brackets.js +305 -305
  181. package/lib/rules/space-in-parens.js +281 -281
  182. package/lib/rules/space-infix-ops.js +106 -106
  183. package/lib/rules/space-return-throw-case.js +38 -38
  184. package/lib/rules/space-unary-ops.js +124 -133
  185. package/lib/rules/spaced-comment.js +143 -0
  186. package/lib/rules/spaced-line-comment.js +89 -89
  187. package/lib/rules/strict.js +242 -242
  188. package/lib/rules/use-isnan.js +26 -26
  189. package/lib/rules/valid-jsdoc.js +215 -215
  190. package/lib/rules/valid-typeof.js +42 -42
  191. package/lib/rules/vars-on-top.js +115 -115
  192. package/lib/rules/wrap-iife.js +48 -48
  193. package/lib/rules/wrap-regex.js +38 -38
  194. package/lib/rules/yoda.js +242 -225
  195. package/lib/rules.js +88 -88
  196. package/lib/timing.js +109 -109
  197. package/lib/token-store.js +201 -201
  198. package/lib/util/traverse.js +105 -105
  199. package/lib/util.js +125 -85
  200. package/package.json +6 -6
  201. package/CHANGELOG.md +0 -1638
@@ -1,167 +1,167 @@
1
- /**
2
- * @fileoverview Util class to find config files.
3
- * @author Aliaksei Shytkin
4
- * @copyright 2014 Michael McLaughlin. All rights reserved.
5
- */
6
- "use strict";
7
-
8
- //------------------------------------------------------------------------------
9
- // Requirements
10
- //------------------------------------------------------------------------------
11
-
12
- var fs = require("fs"),
13
- path = require("path");
14
-
15
- //------------------------------------------------------------------------------
16
- // Helpers
17
- //------------------------------------------------------------------------------
18
-
19
- /**
20
- * Get the entries for a directory. Including a try-catch may be detrimental to
21
- * function performance, so move it out here a separate function.
22
- * @param {string} directory The directory to search in.
23
- * @returns {string[]} The entries in the directory or an empty array on error.
24
- * @private
25
- */
26
- function getDirectoryEntries(directory) {
27
- try {
28
- return fs.readdirSync(directory);
29
- } catch (ex) {
30
- return [];
31
- }
32
- }
33
-
34
- //------------------------------------------------------------------------------
35
- // API
36
- //------------------------------------------------------------------------------
37
-
38
- /**
39
- * FileFinder
40
- * @constructor
41
- * @param {...string} arguments The basename(s) of the file(s) to find.
42
- */
43
- function FileFinder() {
44
- this.fileNames = Array.prototype.slice.call(arguments);
45
- this.cache = {};
46
- }
47
-
48
- /**
49
- * Find one instance of a specified file name in directory or in a parent directory.
50
- * Cache the results.
51
- * Does not check if a matching directory entry is a file, and intentionally
52
- * only searches for the first file name in this.fileNames.
53
- * Is currently used by lib/ignored_paths.js to find an .eslintignore file.
54
- * @param {string} directory The directory to start the search from.
55
- * @returns {string} Path of the file found, or an empty string if not found.
56
- */
57
- FileFinder.prototype.findInDirectoryOrParents = function (directory) {
58
- var cache = this.cache,
59
- child,
60
- dirs,
61
- filePath,
62
- i,
63
- name,
64
- searched;
65
-
66
- if (!directory) {
67
- directory = process.cwd();
68
- }
69
-
70
- if (cache.hasOwnProperty(directory)) {
71
- return cache[directory];
72
- }
73
-
74
- dirs = [];
75
- searched = 0;
76
- name = this.fileNames[0];
77
-
78
- while (directory !== child) {
79
- dirs[searched++] = directory;
80
-
81
- if (getDirectoryEntries(directory).indexOf(name) !== -1) {
82
- filePath = path.resolve(directory, name);
83
- break;
84
- }
85
-
86
- child = directory;
87
-
88
- // Assign parent directory to directory.
89
- directory = path.dirname(directory);
90
- }
91
-
92
- for (i = 0; i < searched; i++) {
93
- cache[dirs[i]] = filePath;
94
- }
95
-
96
- return filePath || String();
97
- };
98
-
99
- /**
100
- * Find all instances of files with the specified file names, in directory and
101
- * parent directories. Cache the results.
102
- * Does not check if a matching directory entry is a file.
103
- * Searches for all the file names in this.fileNames.
104
- * Is currently used by lib/config.js to find .eslintrc and package.json files.
105
- * @param {string} directory The directory to start the search from.
106
- * @returns {string[]} The file paths found.
107
- */
108
- FileFinder.prototype.findAllInDirectoryAndParents = function (directory) {
109
- var cache = this.cache,
110
- child,
111
- dirs,
112
- name,
113
- fileNames,
114
- fileNamesCount,
115
- filePath,
116
- i,
117
- j,
118
- searched;
119
-
120
- if (!directory) {
121
- directory = process.cwd();
122
- }
123
-
124
- if (cache.hasOwnProperty(directory)) {
125
- return cache[directory];
126
- }
127
-
128
- dirs = [];
129
- searched = 0;
130
- fileNames = this.fileNames;
131
- fileNamesCount = fileNames.length;
132
-
133
- do {
134
- dirs[searched++] = directory;
135
- cache[directory] = [];
136
-
137
- for (i = 0; i < fileNamesCount; i++) {
138
- name = fileNames[i];
139
-
140
- if (getDirectoryEntries(directory).indexOf(name) !== -1) {
141
- filePath = path.resolve(directory, name);
142
-
143
- // Add the file path to the cache of each directory searched.
144
- for (j = 0; j < searched; j++) {
145
- cache[dirs[j]].push(filePath);
146
- }
147
- }
148
- }
149
- child = directory;
150
-
151
- // Assign parent directory to directory.
152
- directory = path.dirname(directory);
153
-
154
- if (directory === child) {
155
- return cache[dirs[0]];
156
- }
157
- } while (!cache.hasOwnProperty(directory));
158
-
159
- // Add what has been cached previously to the cache of each directory searched.
160
- for (i = 0; i < searched; i++) {
161
- dirs.push.apply(cache[dirs[i]], cache[directory]);
162
- }
163
-
164
- return cache[dirs[0]];
165
- };
166
-
167
- module.exports = FileFinder;
1
+ /**
2
+ * @fileoverview Util class to find config files.
3
+ * @author Aliaksei Shytkin
4
+ * @copyright 2014 Michael McLaughlin. All rights reserved.
5
+ */
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ var fs = require("fs"),
13
+ path = require("path");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Helpers
17
+ //------------------------------------------------------------------------------
18
+
19
+ /**
20
+ * Get the entries for a directory. Including a try-catch may be detrimental to
21
+ * function performance, so move it out here a separate function.
22
+ * @param {string} directory The directory to search in.
23
+ * @returns {string[]} The entries in the directory or an empty array on error.
24
+ * @private
25
+ */
26
+ function getDirectoryEntries(directory) {
27
+ try {
28
+ return fs.readdirSync(directory);
29
+ } catch (ex) {
30
+ return [];
31
+ }
32
+ }
33
+
34
+ //------------------------------------------------------------------------------
35
+ // API
36
+ //------------------------------------------------------------------------------
37
+
38
+ /**
39
+ * FileFinder
40
+ * @constructor
41
+ * @param {...string} arguments The basename(s) of the file(s) to find.
42
+ */
43
+ function FileFinder() {
44
+ this.fileNames = Array.prototype.slice.call(arguments);
45
+ this.cache = {};
46
+ }
47
+
48
+ /**
49
+ * Find one instance of a specified file name in directory or in a parent directory.
50
+ * Cache the results.
51
+ * Does not check if a matching directory entry is a file, and intentionally
52
+ * only searches for the first file name in this.fileNames.
53
+ * Is currently used by lib/ignored_paths.js to find an .eslintignore file.
54
+ * @param {string} directory The directory to start the search from.
55
+ * @returns {string} Path of the file found, or an empty string if not found.
56
+ */
57
+ FileFinder.prototype.findInDirectoryOrParents = function (directory) {
58
+ var cache = this.cache,
59
+ child,
60
+ dirs,
61
+ filePath,
62
+ i,
63
+ name,
64
+ searched;
65
+
66
+ if (!directory) {
67
+ directory = process.cwd();
68
+ }
69
+
70
+ if (cache.hasOwnProperty(directory)) {
71
+ return cache[directory];
72
+ }
73
+
74
+ dirs = [];
75
+ searched = 0;
76
+ name = this.fileNames[0];
77
+
78
+ while (directory !== child) {
79
+ dirs[searched++] = directory;
80
+
81
+ if (getDirectoryEntries(directory).indexOf(name) !== -1 && fs.statSync(path.resolve(directory, name)).isFile()) {
82
+ filePath = path.resolve(directory, name);
83
+ break;
84
+ }
85
+
86
+ child = directory;
87
+
88
+ // Assign parent directory to directory.
89
+ directory = path.dirname(directory);
90
+ }
91
+
92
+ for (i = 0; i < searched; i++) {
93
+ cache[dirs[i]] = filePath;
94
+ }
95
+
96
+ return filePath || String();
97
+ };
98
+
99
+ /**
100
+ * Find all instances of files with the specified file names, in directory and
101
+ * parent directories. Cache the results.
102
+ * Does not check if a matching directory entry is a file.
103
+ * Searches for all the file names in this.fileNames.
104
+ * Is currently used by lib/config.js to find .eslintrc and package.json files.
105
+ * @param {string} directory The directory to start the search from.
106
+ * @returns {string[]} The file paths found.
107
+ */
108
+ FileFinder.prototype.findAllInDirectoryAndParents = function (directory) {
109
+ var cache = this.cache,
110
+ child,
111
+ dirs,
112
+ name,
113
+ fileNames,
114
+ fileNamesCount,
115
+ filePath,
116
+ i,
117
+ j,
118
+ searched;
119
+
120
+ if (!directory) {
121
+ directory = process.cwd();
122
+ }
123
+
124
+ if (cache.hasOwnProperty(directory)) {
125
+ return cache[directory];
126
+ }
127
+
128
+ dirs = [];
129
+ searched = 0;
130
+ fileNames = this.fileNames;
131
+ fileNamesCount = fileNames.length;
132
+
133
+ do {
134
+ dirs[searched++] = directory;
135
+ cache[directory] = [];
136
+
137
+ for (i = 0; i < fileNamesCount; i++) {
138
+ name = fileNames[i];
139
+
140
+ if (getDirectoryEntries(directory).indexOf(name) !== -1 && fs.statSync(path.resolve(directory, name)).isFile()) {
141
+ filePath = path.resolve(directory, name);
142
+
143
+ // Add the file path to the cache of each directory searched.
144
+ for (j = 0; j < searched; j++) {
145
+ cache[dirs[j]].push(filePath);
146
+ }
147
+ }
148
+ }
149
+ child = directory;
150
+
151
+ // Assign parent directory to directory.
152
+ directory = path.dirname(directory);
153
+
154
+ if (directory === child) {
155
+ return cache[dirs[0]];
156
+ }
157
+ } while (!cache.hasOwnProperty(directory));
158
+
159
+ // Add what has been cached previously to the cache of each directory searched.
160
+ for (i = 0; i < searched; i++) {
161
+ dirs.push.apply(cache[dirs[i]], cache[directory]);
162
+ }
163
+
164
+ return cache[dirs[0]];
165
+ };
166
+
167
+ module.exports = FileFinder;
@@ -1,68 +1,68 @@
1
- /**
2
- * @fileoverview CheckStyle XML reporter
3
- * @author Ian Christian Myers
4
- */
5
- "use strict";
6
-
7
- //------------------------------------------------------------------------------
8
- // Helper Functions
9
- //------------------------------------------------------------------------------
10
-
11
- function getMessageType(message) {
12
- if (message.fatal || message.severity === 2) {
13
- return "error";
14
- } else {
15
- return "warning";
16
- }
17
- }
18
-
19
- function xmlEscape(s) {
20
- return ("" + s).replace(/[<>&"']/g, function(c) {
21
- switch (c) {
22
- case "<":
23
- return "&lt;";
24
- case ">":
25
- return "&gt;";
26
- case "&":
27
- return "&amp;";
28
- case "\"":
29
- return "&quot;";
30
- case "'":
31
- return "&apos;";
32
- // no default
33
- }
34
- });
35
- }
36
-
37
- //------------------------------------------------------------------------------
38
- // Public Interface
39
- //------------------------------------------------------------------------------
40
-
41
- module.exports = function(results) {
42
-
43
- var output = "";
44
-
45
- output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
46
- output += "<checkstyle version=\"4.3\">";
47
-
48
- results.forEach(function(result) {
49
- var messages = result.messages;
50
-
51
- output += "<file name=\"" + xmlEscape(result.filePath) + "\">";
52
-
53
- messages.forEach(function(message) {
54
- output += "<error line=\"" + xmlEscape(message.line) + "\" " +
55
- "column=\"" + xmlEscape(message.column) + "\" " +
56
- "severity=\"" + xmlEscape(getMessageType(message)) + "\" " +
57
- "message=\"" + xmlEscape(message.message) +
58
- (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />";
59
- });
60
-
61
- output += "</file>";
62
-
63
- });
64
-
65
- output += "</checkstyle>";
66
-
67
- return output;
68
- };
1
+ /**
2
+ * @fileoverview CheckStyle XML reporter
3
+ * @author Ian Christian Myers
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Helper Functions
9
+ //------------------------------------------------------------------------------
10
+
11
+ function getMessageType(message) {
12
+ if (message.fatal || message.severity === 2) {
13
+ return "error";
14
+ } else {
15
+ return "warning";
16
+ }
17
+ }
18
+
19
+ function xmlEscape(s) {
20
+ return ("" + s).replace(/[<>&"']/g, function(c) {
21
+ switch (c) {
22
+ case "<":
23
+ return "&lt;";
24
+ case ">":
25
+ return "&gt;";
26
+ case "&":
27
+ return "&amp;";
28
+ case "\"":
29
+ return "&quot;";
30
+ case "'":
31
+ return "&apos;";
32
+ // no default
33
+ }
34
+ });
35
+ }
36
+
37
+ //------------------------------------------------------------------------------
38
+ // Public Interface
39
+ //------------------------------------------------------------------------------
40
+
41
+ module.exports = function(results) {
42
+
43
+ var output = "";
44
+
45
+ output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
46
+ output += "<checkstyle version=\"4.3\">";
47
+
48
+ results.forEach(function(result) {
49
+ var messages = result.messages;
50
+
51
+ output += "<file name=\"" + xmlEscape(result.filePath) + "\">";
52
+
53
+ messages.forEach(function(message) {
54
+ output += "<error line=\"" + xmlEscape(message.line) + "\" " +
55
+ "column=\"" + xmlEscape(message.column) + "\" " +
56
+ "severity=\"" + xmlEscape(getMessageType(message)) + "\" " +
57
+ "message=\"" + xmlEscape(message.message) +
58
+ (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />";
59
+ });
60
+
61
+ output += "</file>";
62
+
63
+ });
64
+
65
+ output += "</checkstyle>";
66
+
67
+ return output;
68
+ };
@@ -1,53 +1,53 @@
1
- /**
2
- * @fileoverview Compact reporter
3
- * @author Nicholas C. Zakas
4
- */
5
- "use strict";
6
-
7
- //------------------------------------------------------------------------------
8
- // Helper Functions
9
- //------------------------------------------------------------------------------
10
-
11
- function getMessageType(message) {
12
- if (message.fatal || message.severity === 2) {
13
- return "Error";
14
- } else {
15
- return "Warning";
16
- }
17
- }
18
-
19
-
20
- //------------------------------------------------------------------------------
21
- // Public Interface
22
- //------------------------------------------------------------------------------
23
-
24
- module.exports = function(results) {
25
-
26
- var output = "",
27
- total = 0;
28
-
29
- results.forEach(function(result) {
30
-
31
- var messages = result.messages;
32
- total += messages.length;
33
-
34
- messages.forEach(function(message) {
35
-
36
- output += result.filePath + ": ";
37
- output += "line " + (message.line || 0);
38
- output += ", col " + (message.column || 0);
39
- output += ", " + getMessageType(message);
40
- output += " - " + message.message;
41
- output += message.ruleId ? " (" + message.ruleId + ")" : "";
42
- output += "\n";
43
-
44
- });
45
-
46
- });
47
-
48
- if (total > 0) {
49
- output += "\n" + total + " problem" + (total !== 1 ? "s" : "");
50
- }
51
-
52
- return output;
53
- };
1
+ /**
2
+ * @fileoverview Compact reporter
3
+ * @author Nicholas C. Zakas
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Helper Functions
9
+ //------------------------------------------------------------------------------
10
+
11
+ function getMessageType(message) {
12
+ if (message.fatal || message.severity === 2) {
13
+ return "Error";
14
+ } else {
15
+ return "Warning";
16
+ }
17
+ }
18
+
19
+
20
+ //------------------------------------------------------------------------------
21
+ // Public Interface
22
+ //------------------------------------------------------------------------------
23
+
24
+ module.exports = function(results) {
25
+
26
+ var output = "",
27
+ total = 0;
28
+
29
+ results.forEach(function(result) {
30
+
31
+ var messages = result.messages;
32
+ total += messages.length;
33
+
34
+ messages.forEach(function(message) {
35
+
36
+ output += result.filePath + ": ";
37
+ output += "line " + (message.line || 0);
38
+ output += ", col " + (message.column || 0);
39
+ output += ", " + getMessageType(message);
40
+ output += " - " + message.message;
41
+ output += message.ruleId ? " (" + message.ruleId + ")" : "";
42
+ output += "\n";
43
+
44
+ });
45
+
46
+ });
47
+
48
+ if (total > 0) {
49
+ output += "\n" + total + " problem" + (total !== 1 ? "s" : "");
50
+ }
51
+
52
+ return output;
53
+ };
@@ -1,40 +1,40 @@
1
- /**
2
- * @fileoverview JSLint XML reporter
3
- * @author Ian Christian Myers
4
- */
5
- "use strict";
6
-
7
- var xmlescape = require("xml-escape");
8
-
9
- //------------------------------------------------------------------------------
10
- // Public Interface
11
- //------------------------------------------------------------------------------
12
-
13
- module.exports = function(results) {
14
-
15
- var output = "";
16
-
17
- output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
18
- output += "<jslint>";
19
-
20
- results.forEach(function(result) {
21
- var messages = result.messages;
22
-
23
- output += "<file name=\"" + result.filePath + "\">";
24
-
25
- messages.forEach(function(message) {
26
- output += "<issue line=\"" + message.line + "\" " +
27
- "char=\"" + message.column + "\" " +
28
- "evidence=\"" + xmlescape(message.source || "") + "\" " +
29
- "reason=\"" + xmlescape(message.message || "") +
30
- (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />";
31
- });
32
-
33
- output += "</file>";
34
-
35
- });
36
-
37
- output += "</jslint>";
38
-
39
- return output;
40
- };
1
+ /**
2
+ * @fileoverview JSLint XML reporter
3
+ * @author Ian Christian Myers
4
+ */
5
+ "use strict";
6
+
7
+ var xmlescape = require("xml-escape");
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Public Interface
11
+ //------------------------------------------------------------------------------
12
+
13
+ module.exports = function(results) {
14
+
15
+ var output = "";
16
+
17
+ output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
18
+ output += "<jslint>";
19
+
20
+ results.forEach(function(result) {
21
+ var messages = result.messages;
22
+
23
+ output += "<file name=\"" + result.filePath + "\">";
24
+
25
+ messages.forEach(function(message) {
26
+ output += "<issue line=\"" + message.line + "\" " +
27
+ "char=\"" + message.column + "\" " +
28
+ "evidence=\"" + xmlescape(message.source || "") + "\" " +
29
+ "reason=\"" + xmlescape(message.message || "") +
30
+ (message.ruleId ? " (" + message.ruleId + ")" : "") + "\" />";
31
+ });
32
+
33
+ output += "</file>";
34
+
35
+ });
36
+
37
+ output += "</jslint>";
38
+
39
+ return output;
40
+ };