forked from gberaudo/eslint-plugin-googshift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
one-provide-or-module.js
43 lines (39 loc) · 1.31 KB
/
one-provide-or-module.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
'use strict';
const util = require('./util');
exports.rule = {
meta: {
docs: {
description: 'disallow multiple goog.provide() or goog.module() calls'
}
},
create: function(context) {
let hasProvide = false;
let hasModule = false;
return {
ExpressionStatement: function(statement) {
if (util.isModuleStatement(statement)) {
if (hasModule) {
const name = statement.expression.arguments[0].value;
context.report(statement, `Extra goog.module('${name}')`);
} else if (hasProvide) {
const name = statement.expression.arguments[0].value;
context.report(statement, `Forbidden goog.module('${name}'), a goog.provide() is already present`);
} else {
hasModule = true;
}
}
if (util.isProvideStatement(statement)) {
if (hasModule) {
const name = statement.expression.arguments[0].value;
context.report(statement, `Forbidden goog.provide('${name}'), a goog.module() is already present`);
} else if (hasProvide) {
const name = statement.expression.arguments[0].value;
context.report(statement, `Extra goog.provide('${name}')`);
} else {
hasProvide = true;
}
}
}
};
}
};