tools: enable additional eslint rules

Enable additional rules that node either already adheres to
or it makes sense to do so going forward: for-direction,
accessor-pairs, no-lonely-if and symbol-description.

Fix all instances of no-lonely-if in lib & test and disable
accessor-pairs in test-util-inspect.

PR-URL: https://github.com/nodejs/node/pull/16243
Refs: https://eslint.org/docs/rules/for-direction
Refs: https://eslint.org/docs/rules/accessor-pairs
Refs: https://eslint.org/docs/rules/no-lonely-if
Refs: https://eslint.org/docs/rules/symbol-description
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
Anatoli Papirovski 2017-10-16 18:37:14 -04:00
Родитель bf1bacef6b
Коммит 3c0ebf5aca
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 614E2E1ABEB4B2C0
22 изменённых файлов: 118 добавлений и 138 удалений

Просмотреть файл

@ -18,6 +18,7 @@ overrides:
rules:
# Possible Errors
# http://eslint.org/docs/rules/#possible-errors
for-direction: error
no-control-regex: error
no-debugger: error
no-dupe-args: error
@ -41,6 +42,7 @@ rules:
# Best Practices
# http://eslint.org/docs/rules/#best-practices
accessor-pairs: error
dot-location: [error, property]
eqeqeq: [error, smart]
no-fallthrough: error
@ -122,6 +124,7 @@ rules:
ignoreUrls: true,
tabWidth: 2}]
new-parens: error
no-lonely-if: error
no-mixed-spaces-and-tabs: error
no-multiple-empty-lines: [error, {max: 2, maxEOF: 0, maxBOF: 0}]
no-restricted-syntax: [error, {
@ -172,6 +175,7 @@ rules:
no-this-before-super: error
prefer-const: [error, {ignoreReadBeforeAssign: true}]
rest-spread-spacing: error
symbol-description: error
template-curly-spacing: error
# Custom rules in tools/eslint-rules

Просмотреть файл

@ -6,6 +6,7 @@ rules:
no-undef: off
no-unused-vars: off
strict: off
symbol-description: off
# add new ECMAScript features gradually
no-var: error

Просмотреть файл

@ -301,10 +301,9 @@ function _addHeaderLine(field, value, dest) {
} else {
dest['set-cookie'] = [value];
}
} else {
} else if (dest[field] === undefined) {
// Drop duplicates
if (dest[field] === undefined)
dest[field] = value;
dest[field] = value;
}
}

Просмотреть файл

@ -404,20 +404,18 @@ function _storeHeader(firstLine, headers) {
this.chunkedEncoding = false;
} else if (!this.useChunkedEncodingByDefault) {
this._last = true;
} else if (!state.trailer &&
!this._removedContLen &&
typeof this._contentLength === 'number') {
state.header += 'Content-Length: ' + this._contentLength + CRLF;
} else if (!this._removedTE) {
state.header += 'Transfer-Encoding: chunked\r\n';
this.chunkedEncoding = true;
} else {
if (!state.trailer &&
!this._removedContLen &&
typeof this._contentLength === 'number') {
state.header += 'Content-Length: ' + this._contentLength + CRLF;
} else if (!this._removedTE) {
state.header += 'Transfer-Encoding: chunked\r\n';
this.chunkedEncoding = true;
} else {
// We should only be able to get here if both Content-Length and
// Transfer-Encoding are removed by the user.
// See: test/parallel/test-http-remove-header-stays-removed.js
debug('Both Content-Length and Transfer-Encoding are removed');
}
// We should only be able to get here if both Content-Length and
// Transfer-Encoding are removed by the user.
// See: test/parallel/test-http-remove-header-stays-removed.js
debug('Both Content-Length and Transfer-Encoding are removed');
}
}

Просмотреть файл

@ -433,8 +433,8 @@ function socketOnEnd(server, socket, parser, state) {
state.outgoing[state.outgoing.length - 1]._last = true;
} else if (socket._httpMessage) {
socket._httpMessage._last = true;
} else {
if (socket.writable) socket.end();
} else if (socket.writable) {
socket.end();
}
}
@ -602,13 +602,11 @@ function parserOnIncoming(server, socket, state, req, keepAlive) {
res.writeContinue();
server.emit('request', req, res);
}
} else if (server.listenerCount('checkExpectation') > 0) {
server.emit('checkExpectation', req, res);
} else {
if (server.listenerCount('checkExpectation') > 0) {
server.emit('checkExpectation', req, res);
} else {
res.writeHead(417);
res.end();
}
res.writeHead(417);
res.end();
}
} else {
server.emit('request', req, res);

Просмотреть файл

@ -40,20 +40,19 @@ const kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
function prependListener(emitter, event, fn) {
// Sadly this is not cacheable as some libraries bundle their own
// event emitter implementation with them.
if (typeof emitter.prependListener === 'function') {
if (typeof emitter.prependListener === 'function')
return emitter.prependListener(event, fn);
} else {
// This is a hack to make sure that our error handler is attached before any
// userland ones. NEVER DO THIS. This is here only because this code needs
// to continue to work with older versions of Node.js that do not include
// the prependListener() method. The goal is to eventually remove this hack.
if (!emitter._events || !emitter._events[event])
emitter.on(event, fn);
else if (Array.isArray(emitter._events[event]))
emitter._events[event].unshift(fn);
else
emitter._events[event] = [fn, emitter._events[event]];
}
// This is a hack to make sure that our error handler is attached before any
// userland ones. NEVER DO THIS. This is here only because this code needs
// to continue to work with older versions of Node.js that do not include
// the prependListener() method. The goal is to eventually remove this hack.
if (!emitter._events || !emitter._events[event])
emitter.on(event, fn);
else if (Array.isArray(emitter._events[event]))
emitter._events[event].unshift(fn);
else
emitter._events[event] = [fn, emitter._events[event]];
}
function ReadableState(options, stream) {

Просмотреть файл

@ -878,8 +878,8 @@ SecurePair.prototype.error = function(returnOnly) {
/peer did not return a certificate/.test(err.message)) {
// Not really an error.
this.destroy();
} else {
if (!returnOnly) this.cleartext.emit('error', err);
} else if (!returnOnly) {
this.cleartext.emit('error', err);
}
return err;
};

Просмотреть файл

@ -324,11 +324,10 @@ exports.execFile = function(file /*, args, options, callback*/) {
if (stdoutLen > options.maxBuffer) {
ex = new Error('stdout maxBuffer exceeded');
kill();
} else if (encoding) {
_stdout += chunk;
} else {
if (encoding)
_stdout += chunk;
else
_stdout.push(chunk);
_stdout.push(chunk);
}
});
}
@ -343,11 +342,10 @@ exports.execFile = function(file /*, args, options, callback*/) {
if (stderrLen > options.maxBuffer) {
ex = new Error('stderr maxBuffer exceeded');
kill();
} else if (encoding) {
_stderr += chunk;
} else {
if (encoding)
_stderr += chunk;
else
_stderr.push(chunk);
_stderr.push(chunk);
}
});
}

Просмотреть файл

@ -280,13 +280,11 @@ function _addListener(target, type, listener, prepend) {
// Adding the second element, need to change to array.
existing = events[type] =
prepend ? [listener, existing] : [existing, listener];
} else {
// If we've already got an array, just append.
if (prepend) {
existing.unshift(listener);
} else {
existing.push(listener);
}
} else if (prepend) {
existing.unshift(listener);
} else {
existing.push(listener);
}
// Check for listener leak

Просмотреть файл

@ -1262,21 +1262,19 @@ function writeAll(fd, isUserFd, buffer, offset, length, position, callback) {
callback(writeErr);
});
}
} else {
if (written === length) {
if (isUserFd) {
callback(null);
} else {
fs.close(fd, callback);
}
} else if (written === length) {
if (isUserFd) {
callback(null);
} else {
offset += written;
length -= written;
if (position !== null) {
position += written;
}
writeAll(fd, isUserFd, buffer, offset, length, position, callback);
fs.close(fd, callback);
}
} else {
offset += written;
length -= written;
if (position !== null) {
position += written;
}
writeAll(fd, isUserFd, buffer, offset, length, position, callback);
}
});
}

Просмотреть файл

@ -187,12 +187,11 @@ function onSessionHeaders(id, cat, flags, headers) {
}
} else if (cat === NGHTTP2_HCAT_PUSH_RESPONSE) {
event = 'push';
} else { // cat === NGHTTP2_HCAT_HEADERS:
if (!endOfStream && status !== undefined && status >= 200) {
event = 'response';
} else {
event = endOfStream ? 'trailers' : 'headers';
}
// cat === NGHTTP2_HCAT_HEADERS:
} else if (!endOfStream && status !== undefined && status >= 200) {
event = 'response';
} else {
event = endOfStream ? 'trailers' : 'headers';
}
debug(`[${sessionName(owner[kType])}] emitting stream '${event}' event`);
process.nextTick(emit, stream, event, obj, flags, headers);

Просмотреть файл

@ -455,17 +455,15 @@ const win32 = {
} else {
return '';
}
} else if (isAbsolute) {
if (tail.length > 0)
return device + '\\' + tail;
else
return device + '\\';
} else if (tail.length > 0) {
return device + tail;
} else {
if (isAbsolute) {
if (tail.length > 0)
return device + '\\' + tail;
else
return device + '\\';
} else if (tail.length > 0) {
return device + tail;
} else {
return device;
}
return device;
}
},

Просмотреть файл

@ -315,9 +315,8 @@ function parse(qs, sep, eq, options) {
sepIdx = eqIdx = 0;
continue;
}
} else {
if (lastPos < end)
value += qs.slice(lastPos, end);
} else if (lastPos < end) {
value += qs.slice(lastPos, end);
}
if (key.length > 0 && keyEncoded)

Просмотреть файл

@ -128,16 +128,14 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
if (isWs)
continue;
lastPos = start = i;
} else {
if (inWs) {
if (!isWs) {
end = -1;
inWs = false;
}
} else if (isWs) {
end = i;
inWs = true;
} else if (inWs) {
if (!isWs) {
end = -1;
inWs = false;
}
} else if (isWs) {
end = i;
inWs = true;
}
// Only convert backslashes while we haven't seen a split character

Просмотреть файл

@ -5,6 +5,7 @@ rules:
# http://eslint.org/docs/rules/#ecmascript-6
no-var: error
prefer-const: error
symbol-description: off
# Custom rules in tools/eslint-rules
prefer-assert-iferror: error

Просмотреть файл

@ -24,11 +24,10 @@ function run(flags, signals) {
assert.strictEqual(code, 0xC0000005);
else
assert.strictEqual(code, 1);
} else if (signals) {
assert(signals.includes(sig), `Unexpected signal ${sig}`);
} else {
if (signals)
assert(signals.includes(sig), `Unexpected signal ${sig}`);
else
assert.strictEqual(sig, null);
assert.strictEqual(sig, null);
}
}));
}

Просмотреть файл

@ -37,10 +37,8 @@ if (cluster.isMaster) {
unbound.disconnect();
unbound.on('disconnect', cluster.disconnect);
}
} else {
if (process.env.BOUND === 'y') {
const source = net.createServer();
} else if (process.env.BOUND === 'y') {
const source = net.createServer();
source.listen(0);
}
source.listen(0);
}

Просмотреть файл

@ -40,10 +40,8 @@ if (cluster.isMaster) {
unbound.disconnect();
unbound.on('disconnect', cluster.disconnect);
}
} else {
if (process.env.BOUND === 'y') {
const source = dgram.createSocket('udp4');
} else if (process.env.BOUND === 'y') {
const source = dgram.createSocket('udp4');
source.bind(0);
}
source.bind(0);
}

Просмотреть файл

@ -41,17 +41,15 @@ if (cluster.isMaster) {
worker.on('disconnect', common.mustCall());
worker.on('exit', common.mustCall());
});
} else {
if (cluster.worker.id === 1) {
// Call destroy when worker is disconnected
cluster.worker.process.on('disconnect', function() {
cluster.worker.destroy();
});
const w = cluster.worker.disconnect();
assert.strictEqual(w, cluster.worker);
} else {
// Call destroy when worker is not disconnected yet
} else if (cluster.worker.id === 1) {
// Call destroy when worker is disconnected
cluster.worker.process.on('disconnect', function() {
cluster.worker.destroy();
}
});
const w = cluster.worker.disconnect();
assert.strictEqual(w, cluster.worker);
} else {
// Call destroy when worker is not disconnected yet
cluster.worker.destroy();
}

Просмотреть файл

@ -335,21 +335,19 @@ function runTest(port, testIndex) {
port = server.address().port;
if (tcase.debug) {
console.error(`${prefix}TLS server running on port ${port}`);
} else if (tcase.renegotiate) {
runNextClient(0);
} else {
if (tcase.renegotiate) {
runNextClient(0);
} else {
let clientsCompleted = 0;
for (let i = 0; i < tcase.clients.length; i++) {
runClient(`${prefix}${i} `, port, tcase.clients[i], function() {
clientsCompleted++;
if (clientsCompleted === tcase.clients.length) {
server.close();
successfulTests++;
runTest(port, nextTest++);
}
});
}
let clientsCompleted = 0;
for (let i = 0; i < tcase.clients.length; i++) {
runClient(`${prefix}${i} `, port, tcase.clients[i], function() {
clientsCompleted++;
if (clientsCompleted === tcase.clients.length) {
server.close();
successfulTests++;
runTest(port, nextTest++);
}
});
}
}
});

Просмотреть файл

@ -26,6 +26,8 @@ const JSStream = process.binding('js_stream').JSStream;
const util = require('util');
const vm = require('vm');
/* eslint-disable accessor-pairs */
assert.strictEqual(util.inspect(1), '1');
assert.strictEqual(util.inspect(false), 'false');
assert.strictEqual(util.inspect(''), "''");
@ -1149,3 +1151,4 @@ if (typeof Symbol !== 'undefined') {
}
assert.doesNotThrow(() => util.inspect(process));
/* eslint-enable accessor-pairs */

Просмотреть файл

@ -43,10 +43,8 @@ module.exports.inSkipBlock = function(node) {
}
return false;
});
} else {
if (hasSkip(consequent.expression)) {
hasSkipBlock = true;
}
} else if (hasSkip(consequent.expression)) {
hasSkipBlock = true;
}
}
return hasSkipBlock;