You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/** * @fileoverview Enforces or disallows inline comments. * @author Greg Cochard */ "use strict";
const astUtils = require("./utils/ast-utils");
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
module.exports = { meta: { type: "suggestion",
docs: { description: "disallow inline comments after code", category: "Stylistic Issues", recommended: false, url: "https://eslint.org/docs/rules/no-inline-comments" },
schema: [],
messages: { unexpectedInlineComment: "Unexpected comment inline with code." } },
create(context) { const sourceCode = context.getSourceCode();
/** * Will check that comments are not on lines starting with or ending with code * @param {ASTNode} node The comment node to check * @private * @returns {void} */ function testCodeAroundComment(node) {
const startLine = String(sourceCode.lines[node.loc.start.line - 1]), endLine = String(sourceCode.lines[node.loc.end.line - 1]), preamble = startLine.slice(0, node.loc.start.column).trim(), postamble = endLine.slice(node.loc.end.column).trim(), isPreambleEmpty = !preamble, isPostambleEmpty = !postamble;
// Nothing on both sides
if (isPreambleEmpty && isPostambleEmpty) { return; }
// JSX Exception
if ( (isPreambleEmpty || preamble === "{") && (isPostambleEmpty || postamble === "}") ) { const enclosingNode = sourceCode.getNodeByRangeIndex(node.range[0]);
if (enclosingNode && enclosingNode.type === "JSXEmptyExpression") { return; } }
// Don't report ESLint directive comments
if (astUtils.isDirectiveComment(node)) { return; }
context.report({ node, messageId: "unexpectedInlineComment" }); }
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
return { Program() { const comments = sourceCode.getAllComments();
comments.filter(token => token.type !== "Shebang").forEach(testCodeAroundComment); } }; } };
|