UNPKG

2.17 kBJavaScriptView Raw
1/**
2 * Requires space after opening object curly brace and before closing in import statements.
3 *
4 * Type: `Boolean`
5 *
6 * Value: `true`
7 *
8 * #### Example
9 *
10 * ```js
11 * "requireSpacesInsideImportedObjectBraces": true
12 * ```
13 *
14 * ##### Valid
15 *
16 * ```js
17 * import { foo, bar } from 'foo-bar';
18 *
19 * import { foo as f, bar } from 'foo-bar';
20 * ```
21 *
22 * ##### Invalid
23 *
24 * ```js
25 * import {foo, bar} from 'foo-bar';
26 *
27 * import {foo as f, bar} from 'foo-bar';
28 * ```
29 */
30
31var assert = require('assert');
32
33module.exports = function() {};
34
35module.exports.prototype = {
36
37 configure: function(options) {
38 assert(
39 options === true,
40 this.getOptionName() + ' option requires a true value or should be removed'
41 );
42 },
43
44 getOptionName: function() {
45 return 'requireSpacesInsideImportedObjectBraces';
46 },
47
48 check: function(file, errors) {
49 file.iterateNodesByType(['ImportDeclaration'], function(node) {
50
51 if (!node.specifiers) {
52 return;
53 }
54
55 node.specifiers.forEach(function(specifier) {
56
57 if (specifier.type !== 'ImportSpecifier') {
58 return;
59 }
60
61 var maybeOpeningBrace = file.getPrevToken(specifier.getFirstToken());
62 var maybeClosingBrace = file.getNextToken(specifier.getLastToken());
63
64 if (maybeOpeningBrace.value === '{') {
65 errors.assert.spacesBetween({
66 token: maybeOpeningBrace,
67 nextToken: specifier.getFirstToken(),
68 exactly: 1,
69 message: 'One space required after opening curly brace'
70 });
71 }
72
73 if (maybeClosingBrace.value === '}') {
74 errors.assert.spacesBetween({
75 token: specifier.getLastToken(),
76 nextToken: maybeClosingBrace,
77 exactly: 1,
78 message: 'One space required before closing curly brace'
79 });
80 }
81 });
82 });
83 }
84};