Skip to content

Commit 62fde7d

Browse files
committed
[eslint] more cleanup
1 parent 5368ca4 commit 62fde7d

18 files changed

+231
-202
lines changed

.eslintrc

+12-23
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,25 @@
55

66
"rules": {
77
"array-element-newline": 0,
8-
"camelcase": 1,
9-
"comma-dangle": 1,
108
"complexity": 0,
11-
"curly": 1,
12-
"dot-notation": 1,
13-
"func-style": 1,
9+
"func-style": [2, "declaration"],
1410
"max-lines-per-function": 0,
1511
"max-nested-callbacks": 1,
12+
"max-statements-per-line": 1,
1613
"max-statements": 0,
1714
"multiline-comment-style": 0,
18-
"no-array-constructor": 1,
1915
"no-continue": 1,
20-
"no-div-regex": 1,
21-
"no-extra-parens": 1,
22-
"no-mixed-operators": 1,
2316
"no-param-reassign": 1,
24-
"no-plusplus": 1,
25-
"no-proto": 1,
26-
"no-redeclare": 1,
2717
"no-restricted-syntax": 1,
28-
"no-shadow": 1,
29-
"no-unused-vars": 1,
30-
"no-use-before-define": 1,
31-
"object-curly-newline": 1,
32-
"operator-linebreak": 1,
33-
"quote-props": 1,
34-
"quotes": 1,
35-
"semi-style": 1,
36-
"semi": 1,
37-
"strict": 1,
38-
"wrap-regex": 1,
18+
"object-curly-newline": 0,
3919
},
20+
21+
"overrides": [
22+
{
23+
"files": "test/**",
24+
"rules": {
25+
"camelcase": 0,
26+
},
27+
},
28+
]
4029
}

example/parse.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
'use strict';
2+
13
var argv = require('../')(process.argv.slice(2));
24
console.log(argv);

index.js

+111-102
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,54 @@
1+
'use strict';
2+
3+
function hasKey(obj, keys) {
4+
var o = obj;
5+
keys.slice(0, -1).forEach(function (key) {
6+
o = o[key] || {};
7+
});
8+
9+
var key = keys[keys.length - 1];
10+
return key in o;
11+
}
12+
13+
function isNumber(x) {
14+
if (typeof x === 'number') { return true; }
15+
if ((/^0x[0-9a-f]+$/i).test(x)) { return true; }
16+
return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x);
17+
}
18+
19+
function isConstructorOrProto(obj, key) {
20+
return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__';
21+
}
22+
123
module.exports = function (args, opts) {
2-
if (!opts) opts = {};
24+
if (!opts) { opts = {}; }
325

4-
var flags = { bools: {}, strings: {}, unknownFn: null };
26+
var flags = {
27+
bools: {},
28+
strings: {},
29+
unknownFn: null,
30+
};
531

6-
if (typeof opts['unknown'] === 'function') {
7-
flags.unknownFn = opts['unknown'];
32+
if (typeof opts.unknown === 'function') {
33+
flags.unknownFn = opts.unknown;
834
}
935

10-
if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {
36+
if (typeof opts.boolean === 'boolean' && opts.boolean) {
1137
flags.allBools = true;
1238
} else {
13-
[].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
39+
[].concat(opts.boolean).filter(Boolean).forEach(function (key) {
1440
flags.bools[key] = true;
1541
});
1642
}
1743

1844
var aliases = {};
45+
46+
function aliasIsBoolean(key) {
47+
return aliases[key].some(function (x) {
48+
return flags.bools[x];
49+
});
50+
}
51+
1952
Object.keys(opts.alias || {}).forEach(function (key) {
2053
aliases[key] = [].concat(opts.alias[key]);
2154
aliases[key].forEach(function (x) {
@@ -32,138 +65,137 @@ module.exports = function (args, opts) {
3265
}
3366
});
3467

35-
var defaults = opts['default'] || {};
68+
var defaults = opts.default || {};
3669

3770
var argv = { _: [] };
38-
Object.keys(flags.bools).forEach(function (key) {
39-
setArg(key, defaults[key] === undefined ? false : defaults[key]);
40-
});
41-
42-
var notFlags = [];
43-
44-
if (args.indexOf('--') !== -1) {
45-
notFlags = args.slice(args.indexOf('--') + 1);
46-
args = args.slice(0, args.indexOf('--'));
47-
}
4871

4972
function argDefined(key, arg) {
50-
return (flags.allBools && /^--[^=]+$/.test(arg)) ||
51-
flags.strings[key] || flags.bools[key] || aliases[key];
52-
}
53-
54-
function setArg(key, val, arg) {
55-
if (arg && flags.unknownFn && !argDefined(key, arg)) {
56-
if (flags.unknownFn(arg) === false) return;
57-
}
58-
59-
var value = !flags.strings[key] && isNumber(val)
60-
? Number(val)
61-
: val;
62-
setKey(argv, key.split('.'), value);
63-
64-
(aliases[key] || []).forEach(function (x) {
65-
setKey(argv, x.split('.'), value);
66-
});
73+
return (flags.allBools && (/^--[^=]+$/).test(arg))
74+
|| flags.strings[key]
75+
|| flags.bools[key]
76+
|| aliases[key];
6777
}
6878

6979
function setKey(obj, keys, value) {
7080
var o = obj;
7181
for (var i = 0; i < keys.length - 1; i++) {
7282
var key = keys[i];
73-
if (isConstructorOrProto(o, key)) return;
74-
if (o[key] === undefined) o[key] = {};
83+
if (isConstructorOrProto(o, key)) { return; }
84+
if (o[key] === undefined) { o[key] = {}; }
7585
if (
7686
o[key] === Object.prototype
7787
|| o[key] === Number.prototype
7888
|| o[key] === String.prototype
7989
) {
8090
o[key] = {};
8191
}
82-
if (o[key] === Array.prototype) o[key] = [];
92+
if (o[key] === Array.prototype) { o[key] = []; }
8393
o = o[key];
8494
}
8595

86-
var key = keys[keys.length - 1];
87-
if (isConstructorOrProto(o, key)) return;
96+
var lastKey = keys[keys.length - 1];
97+
if (isConstructorOrProto(o, lastKey)) { return; }
8898
if (
8999
o === Object.prototype
90100
|| o === Number.prototype
91101
|| o === String.prototype
92102
) {
93103
o = {};
94104
}
95-
if (o === Array.prototype) o = [];
96-
if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {
97-
o[key] = value;
98-
} else if (Array.isArray(o[key])) {
99-
o[key].push(value);
105+
if (o === Array.prototype) { o = []; }
106+
if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') {
107+
o[lastKey] = value;
108+
} else if (Array.isArray(o[lastKey])) {
109+
o[lastKey].push(value);
100110
} else {
101-
o[key] = [o[key], value];
111+
o[lastKey] = [o[lastKey], value];
102112
}
103113
}
104114

105-
function aliasIsBoolean(key) {
106-
return aliases[key].some(function (x) {
107-
return flags.bools[x];
115+
function setArg(key, val, arg) {
116+
if (arg && flags.unknownFn && !argDefined(key, arg)) {
117+
if (flags.unknownFn(arg) === false) { return; }
118+
}
119+
120+
var value = !flags.strings[key] && isNumber(val)
121+
? Number(val)
122+
: val;
123+
setKey(argv, key.split('.'), value);
124+
125+
(aliases[key] || []).forEach(function (x) {
126+
setKey(argv, x.split('.'), value);
108127
});
109128
}
110129

130+
Object.keys(flags.bools).forEach(function (key) {
131+
setArg(key, defaults[key] === undefined ? false : defaults[key]);
132+
});
133+
134+
var notFlags = [];
135+
136+
if (args.indexOf('--') !== -1) {
137+
notFlags = args.slice(args.indexOf('--') + 1);
138+
args = args.slice(0, args.indexOf('--'));
139+
}
140+
111141
for (var i = 0; i < args.length; i++) {
112142
var arg = args[i];
143+
var key;
144+
var next;
113145

114-
if (/^--.+=/.test(arg)) {
146+
if ((/^--.+=/).test(arg)) {
115147
// Using [\s\S] instead of . because js doesn't support the
116148
// 'dotall' regex modifier. See:
117149
// http://stackoverflow.com/a/1068308/13216
118150
var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
119-
var key = m[1];
151+
key = m[1];
120152
var value = m[2];
121153
if (flags.bools[key]) {
122154
value = value !== 'false';
123155
}
124156
setArg(key, value, arg);
125-
} else if (/^--no-.+/.test(arg)) {
126-
var key = arg.match(/^--no-(.+)/)[1];
157+
} else if ((/^--no-.+/).test(arg)) {
158+
key = arg.match(/^--no-(.+)/)[1];
127159
setArg(key, false, arg);
128-
} else if (/^--.+/.test(arg)) {
129-
var key = arg.match(/^--(.+)/)[1];
130-
var next = args[i + 1];
160+
} else if ((/^--.+/).test(arg)) {
161+
key = arg.match(/^--(.+)/)[1];
162+
next = args[i + 1];
131163
if (
132164
next !== undefined
133-
&& !/^-/.test(next)
165+
&& !(/^-/).test(next)
134166
&& !flags.bools[key]
135167
&& !flags.allBools
136168
&& (aliases[key] ? !aliasIsBoolean(key) : true)
137169
) {
138170
setArg(key, next, arg);
139-
i++;
140-
} else if (/^(true|false)$/.test(next)) {
171+
i += 1;
172+
} else if ((/^(true|false)$/).test(next)) {
141173
setArg(key, next === 'true', arg);
142-
i++;
174+
i += 1;
143175
} else {
144176
setArg(key, flags.strings[key] ? '' : true, arg);
145177
}
146-
} else if (/^-[^-]+/.test(arg)) {
178+
} else if ((/^-[^-]+/).test(arg)) {
147179
var letters = arg.slice(1, -1).split('');
148180

149181
var broken = false;
150182
for (var j = 0; j < letters.length; j++) {
151-
var next = arg.slice(j + 2);
183+
next = arg.slice(j + 2);
152184

153185
if (next === '-') {
154-
setArg(letters[j], next, arg)
186+
setArg(letters[j], next, arg);
155187
continue;
156188
}
157189

158-
if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {
190+
if ((/[A-Za-z]/).test(letters[j]) && (/[=]/).test(next)) {
159191
setArg(letters[j], next.split('=')[1], arg);
160192
broken = true;
161193
break;
162194
}
163195

164196
if (
165-
/[A-Za-z]/.test(letters[j])
166-
&& /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)
197+
(/[A-Za-z]/).test(letters[j])
198+
&& (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next)
167199
) {
168200
setArg(letters[j], next, arg);
169201
broken = true;
@@ -179,26 +211,26 @@ module.exports = function (args, opts) {
179211
}
180212
}
181213

182-
var key = arg.slice(-1)[0];
214+
key = arg.slice(-1)[0];
183215
if (!broken && key !== '-') {
184216
if (
185217
args[i + 1]
186-
&& !/^(-|--)[^-]/.test(args[i + 1])
218+
&& !(/^(-|--)[^-]/).test(args[i + 1])
187219
&& !flags.bools[key]
188220
&& (aliases[key] ? !aliasIsBoolean(key) : true)
189221
) {
190222
setArg(key, args[i + 1], arg);
191-
i++;
192-
} else if (args[i + 1] && /^(true|false)$/.test(args[i + 1])) {
223+
i += 1;
224+
} else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) {
193225
setArg(key, args[i + 1] === 'true', arg);
194-
i++;
226+
i += 1;
195227
} else {
196228
setArg(key, flags.strings[key] ? '' : true, arg);
197229
}
198230
}
199231
} else {
200232
if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
201-
argv._.push(flags.strings['_'] || !isNumber(arg) ? arg : Number(arg));
233+
argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg));
202234
}
203235
if (opts.stopEarly) {
204236
argv._.push.apply(argv._, args.slice(i + 1));
@@ -207,46 +239,23 @@ module.exports = function (args, opts) {
207239
}
208240
}
209241

210-
Object.keys(defaults).forEach(function (key) {
211-
if (!hasKey(argv, key.split('.'))) {
212-
setKey(argv, key.split('.'), defaults[key]);
242+
Object.keys(defaults).forEach(function (k) {
243+
if (!hasKey(argv, k.split('.'))) {
244+
setKey(argv, k.split('.'), defaults[k]);
213245

214-
(aliases[key] || []).forEach(function (x) {
215-
setKey(argv, x.split('.'), defaults[key]);
246+
(aliases[k] || []).forEach(function (x) {
247+
setKey(argv, x.split('.'), defaults[k]);
216248
});
217249
}
218250
});
219251

220252
if (opts['--']) {
221-
argv['--'] = new Array();
222-
notFlags.forEach(function (key) {
223-
argv['--'].push(key);
224-
});
253+
argv['--'] = notFlags.slice();
225254
} else {
226-
notFlags.forEach(function (key) {
227-
argv._.push(key);
255+
notFlags.forEach(function (k) {
256+
argv._.push(k);
228257
});
229258
}
230259

231260
return argv;
232261
};
233-
234-
function hasKey(obj, keys) {
235-
var o = obj;
236-
keys.slice(0, -1).forEach(function (key) {
237-
o = (o[key] || {});
238-
});
239-
240-
var key = keys[keys.length - 1];
241-
return key in o;
242-
}
243-
244-
function isNumber(x) {
245-
if (typeof x === 'number') return true;
246-
if (/^0x[0-9a-f]+$/i.test(x)) return true;
247-
return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
248-
}
249-
250-
function isConstructorOrProto(obj, key) {
251-
return key === 'constructor' && typeof obj[key] === 'function' || key === '__proto__';
252-
}

0 commit comments

Comments
 (0)