Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace nyc with c8 #1686

Merged
merged 2 commits into from
Jan 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
- run: npm install
- run: npm run lint
# Force update snapshots, https://github.com/avajs/ava/discussions/2754
- run: npx nyc ava --update-snapshots
- run: npx c8 ava --update-snapshots
env:
AVA_FORCE_CI: not-ci
- run: npm run generate-rules-table
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
node_modules
yarn.lock
.nyc_output
coverage
package-lock.json
/test/integration/fixtures
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"run-rules-on-codebase": "node ./test/run-rules-on-codebase/lint.mjs",
"smoke": "eslint-remote-tester --config ./test/smoke/eslint-remote-tester.config.js",
"test": "npm-run-all --continue-on-error lint test:*",
"test:js": "nyc ava"
"test:js": "c8 ava"
},
"files": [
"index.js",
Expand Down Expand Up @@ -69,6 +69,7 @@
"@lubien/fixture-beta-package": "^1.0.0-beta.1",
"@typescript-eslint/parser": "^5.7.0",
"ava": "^3.15.0",
"c8": "^7.11.0",
"chalk": "^5.0.0",
"enquirer": "^2.3.6",
"eslint": "^8.6.0",
Expand All @@ -83,7 +84,6 @@
"mem": "^9.0.1",
"npm-package-json-lint": "^5.4.2",
"npm-run-all": "^4.1.5",
"nyc": "^15.1.0",
"outdent": "^0.8.0",
"typescript": "^4.5.4",
"vue-eslint-parser": "^8.0.1",
Expand All @@ -98,7 +98,7 @@
"test/unit/*.mjs"
]
},
"nyc": {
"c8": {
"reporter": [
"text",
"lcov"
Expand Down
2 changes: 1 addition & 1 deletion rules/catch-error-name.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ const create = context => {

// This was reported https://github.com/sindresorhus/eslint-plugin-unicorn/issues/1075#issuecomment-768072967
// But can't reproduce, just ignore this case
/* istanbul ignore next */
/* c8 ignore next 3 */
if (!variable) {
return;
}
Expand Down
4 changes: 2 additions & 2 deletions rules/consistent-function-scoping.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ function checkReferences(scope, parent, scopeManager) {
const identifierScope = scopeManager.acquire(identifier);

// If we have a scope, the earlier checks should have worked so ignore them here
/* istanbul ignore next: Hard to test */
/* c8 ignore next 3 */
if (identifierScope) {
return false;
}

const identifierParentScope = scopeManager.acquire(identifier.parent);
/* istanbul ignore next: Hard to test */
/* c8 ignore next 3 */
if (!identifierParentScope) {
return false;
}
Expand Down
17 changes: 11 additions & 6 deletions rules/expiring-todo-comments.js
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,8 @@ function reachedDate(past) {
}

function tryToCoerceVersion(rawVersion) {
/* istanbul ignore if: version in `package.json` and comment can't be empty */
// `version` in `package.json` and comment can't be empty
/* c8 ignore next 3 */
if (!rawVersion) {
return false;
}
Expand All @@ -215,12 +216,14 @@ function tryToCoerceVersion(rawVersion) {

// Get only the first member for cases such as `1.0.0 - 2.9999.9999`
const parts = version.split(' ');
/* istanbul ignore if: We don't have this `package.json` to test */
// We don't have this `package.json` to test
/* c8 ignore next 3 */
if (parts.length > 1) {
version = parts[0];
}

/* istanbul ignore if: We don't have this `package.json` to test */
// We don't have this `package.json` to test
/* c8 ignore next 3 */
if (semver.valid(version)) {
return version;
}
Expand All @@ -230,7 +233,8 @@ function tryToCoerceVersion(rawVersion) {
// But coerce can't parse pre-releases.
return semver.parse(version) || semver.coerce(version);
} catch {
/* istanbul ignore next: We don't have this `package.json` to test */
// We don't have this `package.json` to test
/* c8 ignore next 3 */
return false;
}
}
Expand Down Expand Up @@ -403,11 +407,12 @@ const create = context => {
const todoVersion = tryToCoerceVersion(dependency.version);
const targetPackageVersion = tryToCoerceVersion(targetPackageRawVersion);

/* istanbul ignore if: Can't test in Node.js */
/* c8 ignore start */
if (!hasTargetPackage || !targetPackageVersion) {
// Can't compare `¯\_(ツ)_/¯`
continue;
}
/* c8 ignore end */

const compare = semverComparisonForOperator(dependency.condition);

Expand All @@ -431,7 +436,7 @@ const create = context => {
const targetPackageRawEngineVersion = packageEngines.node;
const hasTargetEngine = Boolean(targetPackageRawEngineVersion);

/* istanbul ignore if: Can't test in this repo */
/* c8 ignore next 3 */
if (!hasTargetEngine) {
continue;
}
Expand Down
2 changes: 1 addition & 1 deletion rules/fix/append-argument.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const {isCommaToken} = require('eslint-utils');
function appendArgument(fixer, node, text, sourceCode) {
// This function should also work for `NewExpression`
// But parentheses of `NewExpression` could be omitted, add this check to prevent accident use on it
/* istanbul ignore next */
/* c8 ignore next 3 */
if (node.type !== 'CallExpression') {
throw new Error(`Unexpected node "${node.type}".`);
}
Expand Down
3 changes: 2 additions & 1 deletion rules/fix/remove-argument.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ function removeArgument(fixer, node, sourceCode) {
}

// If the removed argument is the only argument, the trailing comma must be removed too
/* istanbul ignore next: Not reachable for now */
/* c8 ignore start */
if (callExpression.arguments.length === 1) {
const tokenAfter = sourceCode.getTokenBefore(lastToken);
if (isCommaToken(tokenAfter)) {
end = tokenAfter[1];
}
}
/* c8 ignore end */

return fixer.replaceTextRange([start, end], '');
}
Expand Down
2 changes: 1 addition & 1 deletion rules/import-style.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ const getActualAssignmentTargetImportStyles = assignmentTarget => {
// Next line is not test-coverable until unforceable changes to the language
// like an addition of new AST node types usable in `const __HERE__ = foo;`.
// An exotic custom parser or a bug in one could cover it too.
/* istanbul ignore next */
/* c8 ignore next */
return [];
};

Expand Down
3 changes: 2 additions & 1 deletion rules/no-array-for-each.js
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,8 @@ function isFixable(callExpression, {scope, functionInfo, allIdentifiers, context
}

// Check `CallExpression.callee`
/* istanbul ignore next: Because of `ChainExpression` wrapper, `foo?.forEach()` is already failed on previous check, keep this just for safety */
// Because of `ChainExpression` wrapper, `foo?.forEach()` is already failed on previous check keep this just for safety
/* c8 ignore next 3 */
if (callExpression.callee.optional) {
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion rules/no-array-push-push.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ function getFirstExpression(node, sourceCode) {
}
}

/* istanbul ignore next */
/* c8 ignore next */
throw new Error('Cannot find the first `Array#push()` call.\nPlease open an issue at https://github.com/sindresorhus/eslint-plugin-unicorn/issues/new?title=%60no-array-push-push%60%3A%20Cannot%20find%20first%20%60push()%60');
}

Expand Down
2 changes: 1 addition & 1 deletion rules/no-keyword-prefix.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ function checkObjectPattern(report, node, options) {
const {name, parent} = node;
const keyword = findKeywordPrefix(name, options);

/* istanbul ignore next: Can't find a case to cover this line */
/* c8 ignore next 3 */
if (parent.shorthand && parent.value.left && Boolean(keyword)) {
report(node, keyword);
}
Expand Down
2 changes: 1 addition & 1 deletion rules/no-static-only-class.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ function switchClassToObject(node, sourceCode) {

return function * (fixer) {
const classToken = sourceCode.getFirstToken(node);
/* istanbul ignore next */
/* c8 ignore next */
assertToken(classToken, {
expected: {type: 'Keyword', value: 'class'},
ruleId: 'no-static-only-class',
Expand Down
4 changes: 2 additions & 2 deletions rules/prefer-array-find.js
Original file line number Diff line number Diff line change
Expand Up @@ -127,14 +127,14 @@ const hasLowerPrecedence = (node, operator) => (
))
|| node.type === 'ConditionalExpression'
// Lower than `assignment`, should already parenthesized
/* istanbul ignore next */
/* c8 ignore next */
|| node.type === 'AssignmentExpression'
|| node.type === 'YieldExpression'
|| node.type === 'SequenceExpression'
);

const getDestructuringLeftAndRight = node => {
/* istanbul ignore next */
/* c8 ignore next 3 */
if (!node) {
return {};
}
Expand Down
2 changes: 1 addition & 1 deletion rules/prefer-default-parameters.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ const create = context => {

// This was reported https://github.com/sindresorhus/eslint-plugin-unicorn/issues/1122
// But can't reproduce, just ignore this case
/* istanbul ignore next */
/* c8 ignore next 3 */
if (!variable) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion rules/prefer-export-from.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ function getExported(identifier, context, sourceCode) {
function isVariableUnused(node, context) {
const variables = context.getDeclaredVariables(node);

/* istanbul ignore next */
/* c8 ignore next 3 */
if (variables.length !== 1) {
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion rules/prefer-keyboard-event-key.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ const getParentByLevel = (node, level) => {
current = current.parent;
}

/* istanbul ignore else */
/* c8 ignore next 3 */
if (level === 0) {
return current;
}
Expand Down
4 changes: 2 additions & 2 deletions rules/prefer-set-has.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ const selector = [
].join('');

const isIncludesCall = node => {
/* istanbul ignore next */
/* c8 ignore next 3 */
if (!node.parent || !node.parent.parent) {
return false;
}
Expand Down Expand Up @@ -131,7 +131,7 @@ const create = context => ({

// This was reported https://github.com/sindresorhus/eslint-plugin-unicorn/issues/1075#issuecomment-768073342
// But can't reproduce, just ignore this case
/* istanbul ignore next */
/* c8 ignore next 3 */
if (!variable) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion rules/prefer-ternary.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const selector = [
const isTernary = node => node && node.type === 'ConditionalExpression';

function getNodeBody(node) {
/* istanbul ignore next */
/* c8 ignore next 3 */
if (!node) {
return;
}
Expand Down
3 changes: 2 additions & 1 deletion rules/selectors/not-dom-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ const impossibleNodeTypes = [
];

// We might need this later
/* istanbul ignore next */
/* c8 ignore start */
const isNotDomNode = node =>
impossibleNodeTypes.includes(node.type)
|| (node.type === 'Identifier' && node.name === 'undefined');
/* c8 ignore end */

const notDomNodeSelector = node => [
...impossibleNodeTypes.map(type => `[${node}.type!="${type}"]`),
Expand Down
2 changes: 1 addition & 1 deletion rules/utils/get-builtin-rule.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
function getBuiltinRule(id) {
// TODO: Remove this when we drop support for ESLint 7
const eslintVersion = require('eslint/package.json').version;
/* istanbul ignore next */
/* c8 ignore next 3 */
if (eslintVersion.startsWith('7.')) {
return require(`eslint/lib/rules/${id}`);
}
Expand Down
3 changes: 2 additions & 1 deletion rules/utils/get-key-name.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ function getKeyOrPropertyName(keyOrProperty, computed, scope) {
return keyOrProperty.name;
}

/* istanbul ignore next: It could be `PrivateIdentifier`(ESTree) or `PrivateName`(Babel) when it's in `class` */
// It could be `PrivateIdentifier`(ESTree) or `PrivateName`(Babel) when it's in `class`
/* c8 ignore next */
return;
}

Expand Down
2 changes: 1 addition & 1 deletion rules/utils/is-function-self-used-inside.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Check if `this`, `arguments`, or the function name is used inside of itself.
@returns {boolean}
*/
function isFunctionSelfUsedInside(functionNode, functionScope) {
/* istanbul ignore next */
/* c8 ignore next 3 */
if (functionScope.block !== functionNode) {
throw new Error('"functionScope" should be the scope of "functionNode".');
}
Expand Down
8 changes: 4 additions & 4 deletions rules/utils/is-same-reference.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,16 @@ function getStaticPropertyName(node) {
property = node.property;
break;

/* istanbul ignore next: Hard to test */
/* c8 ignore next 2 */
case 'ChainExpression':
return getStaticPropertyName(node.expression);

/* istanbul ignore next: Only reachable when use this to get class/object member key */
// Only reachable when use this to get class/object member key
/* c8 ignore next */
case 'Property':
case 'MethodDefinition':
/* istanbul ignore next */
/* c8 ignore next 2 */
property = node.key;
/* istanbul ignore next */
break;

// No default
Expand Down
2 changes: 1 addition & 1 deletion rules/utils/rule.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function wrapFixFunction(fix) {
return;
}

/* istanbul ignore next: Safe */
/* c8 ignore next */
throw error;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ Check if parentheses should be added to a `node` when it's used as child of `Log
@returns {boolean}
*/
function shouldAddParenthesesToLogicalExpressionChild(node, {operator, property}) {
/* istanbul ignore next: When operator or property is different, need check `LogicalExpression` operator precedence, not implemented */
// When operator or property is different, need check `LogicalExpression` operator precedence, not implemented
/* c8 ignore next 3 */
if (operator !== '??' || property !== 'left') {
throw new Error('Not supported.');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ function shouldAddParenthesesToMemberExpressionObject(node, sourceCode) {
case 'NewExpression':
return !isNewExpressionWithParentheses(node, sourceCode);
case 'Literal': {
/* istanbul ignore next */
/* c8 ignore next */
if (isDecimalIntegerNode(node)) {
return true;
}
Expand Down