Comparing version 2.0.6 to 3.0.0
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const critic = require("dts-critic"); | ||
const dts_critic_1 = require("dts-critic"); | ||
const Lint = require("tslint"); | ||
const util_1 = require("../util"); | ||
const defaultOptions = { | ||
mode: dts_critic_1.Mode.NameOnly, | ||
}; | ||
class Rule extends Lint.Rules.AbstractRule { | ||
apply(sourceFile) { | ||
return this.applyWithFunction(sourceFile, walk); | ||
return this.applyWithFunction(sourceFile, walk, parseOptions(this.ruleArguments)); | ||
} | ||
@@ -15,7 +18,131 @@ } | ||
description: "Ensure that package name and DefinitelyTyped header match npm package info.", | ||
optionsDescription: "Not configurable.", | ||
options: null, | ||
optionsDescription: `An object with a \`mode\` property should be provided. | ||
If \`mode\` is '${dts_critic_1.Mode.Code}', then option \`errors\` can be provided. | ||
\`errors\` should be an array specifying which code checks should be enabled or disabled.`, | ||
options: { | ||
oneOf: [ | ||
{ | ||
type: "object", | ||
properties: { | ||
"mode": { | ||
type: "string", | ||
enum: [dts_critic_1.Mode.NameOnly], | ||
}, | ||
"single-line": { | ||
description: "Whether to print error messages in a single line. Used for testing.", | ||
type: "boolean", | ||
}, | ||
"required": ["mode"], | ||
}, | ||
}, | ||
{ | ||
type: "object", | ||
properties: { | ||
"mode": { | ||
type: "string", | ||
enum: [dts_critic_1.Mode.Code], | ||
}, | ||
"errors": { | ||
type: "array", | ||
items: { | ||
type: "array", | ||
items: [ | ||
{ description: "Name of the check.", | ||
type: "string", | ||
enum: [dts_critic_1.ErrorKind.NeedsExportEquals, dts_critic_1.ErrorKind.NoDefaultExport], | ||
}, | ||
{ | ||
description: "Whether the check is enabled or disabled.", | ||
type: "boolean", | ||
}, | ||
], | ||
minItems: 2, | ||
maxItems: 2, | ||
}, | ||
}, | ||
"single-line": { | ||
description: "Whether to print error messages in a single line. Used for testing.", | ||
type: "boolean", | ||
}, | ||
"required": ["mode"], | ||
}, | ||
}, | ||
], | ||
}, | ||
optionExamples: [ | ||
true, | ||
[true, { mode: dts_critic_1.Mode.NameOnly }], | ||
[true, { mode: dts_critic_1.Mode.Code, errors: [[dts_critic_1.ErrorKind.NeedsExportEquals, true], [dts_critic_1.ErrorKind.NoDefaultExport, false]] }], | ||
], | ||
type: "functionality", | ||
typescriptOnly: true, | ||
}; | ||
function parseOptions(args) { | ||
if (args.length === 0) { | ||
return defaultOptions; | ||
} | ||
const arg = args[0]; | ||
if (arg == null) { | ||
return defaultOptions; | ||
} | ||
if (!arg.mode || typeof arg.mode !== "string") { | ||
return defaultOptions; | ||
} | ||
const mode = dts_critic_1.parseMode(arg.mode); | ||
if (!mode) { | ||
return defaultOptions; | ||
} | ||
const singleLine = !!arg["single-line"]; | ||
switch (mode) { | ||
case dts_critic_1.Mode.NameOnly: | ||
return { mode, singleLine }; | ||
case dts_critic_1.Mode.Code: | ||
if (!arg.errors || !Array.isArray(arg.errors)) { | ||
return { mode, errors: new Map(), singleLine }; | ||
} | ||
return { mode, errors: parseEnabledErrors(arg.errors), singleLine }; | ||
} | ||
} | ||
function parseEnabledErrors(errors) { | ||
const enabledChecks = new Map(); | ||
for (const tuple of errors) { | ||
if (Array.isArray(tuple) | ||
&& tuple.length === 2 | ||
&& typeof tuple[0] === "string" | ||
&& typeof tuple[1] === "boolean") { | ||
const error = dts_critic_1.parseExportErrorKind(tuple[0]); | ||
if (error) { | ||
enabledChecks.set(error, tuple[1]); | ||
} | ||
} | ||
} | ||
return enabledChecks; | ||
} | ||
function tslintDisableOption(error) { | ||
switch (error) { | ||
case dts_critic_1.ErrorKind.NoMatchingNpmPackage: | ||
case dts_critic_1.ErrorKind.NoMatchingNpmVersion: | ||
case dts_critic_1.ErrorKind.NonNpmHasMatchingPackage: | ||
return `false`; | ||
case dts_critic_1.ErrorKind.NoDefaultExport: | ||
case dts_critic_1.ErrorKind.NeedsExportEquals: | ||
case dts_critic_1.ErrorKind.JsSignatureNotInDts: | ||
case dts_critic_1.ErrorKind.JsPropertyNotInDts: | ||
case dts_critic_1.ErrorKind.DtsSignatureNotInJs: | ||
case dts_critic_1.ErrorKind.DtsPropertyNotInJs: | ||
return JSON.stringify([true, { mode: dts_critic_1.Mode.Code, errors: [[error, false]] }]); | ||
} | ||
} | ||
function errorMessage(error, opts) { | ||
const message = error.message + | ||
`\nIf you won't fix this error now or you think this error is wrong, | ||
you can disable this check by adding the following options to your project's tslint.json file under "rules": | ||
"npm-naming": ${tslintDisableOption(error.kind)} | ||
`; | ||
if (opts.singleLine) { | ||
return message.replace(/(\r\n|\n|\r|\t)/gm, " "); | ||
} | ||
return message; | ||
} | ||
function walk(ctx) { | ||
@@ -32,21 +159,28 @@ const { sourceFile } = ctx; | ||
try { | ||
critic(sourceFile.fileName); | ||
const errors = dts_critic_1.dtsCritic(sourceFile.fileName, /* sourcePath */ undefined, ctx.options); | ||
for (const error of errors) { | ||
switch (error.kind) { | ||
case dts_critic_1.ErrorKind.NoMatchingNpmPackage: | ||
case dts_critic_1.ErrorKind.NoMatchingNpmVersion: | ||
case dts_critic_1.ErrorKind.NonNpmHasMatchingPackage: | ||
lookFor("// Type definitions for", errorMessage(error, ctx.options)); | ||
break; | ||
case dts_critic_1.ErrorKind.DtsPropertyNotInJs: | ||
case dts_critic_1.ErrorKind.DtsSignatureNotInJs: | ||
case dts_critic_1.ErrorKind.JsPropertyNotInDts: | ||
case dts_critic_1.ErrorKind.JsSignatureNotInDts: | ||
case dts_critic_1.ErrorKind.NeedsExportEquals: | ||
case dts_critic_1.ErrorKind.NoDefaultExport: | ||
if (error.position) { | ||
ctx.addFailureAt(error.position.start, error.position.length, util_1.failure(Rule.metadata.ruleName, errorMessage(error, ctx.options))); | ||
} | ||
else { | ||
ctx.addFailure(0, 1, util_1.failure(Rule.metadata.ruleName, errorMessage(error, ctx.options))); | ||
} | ||
break; | ||
} | ||
} | ||
} | ||
catch (e) { | ||
// TODO: dts-critic should | ||
// 1. not really be using exceptions, but lists | ||
// 2. export an error code enum | ||
// 3. add an errorCode property to the exception (or return value) | ||
if (e.message.indexOf("d.ts file must have a matching npm package") > -1 || | ||
e.message.indexOf("must match a version that exists on npm") > -1 || | ||
e.message.indexOf("The non-npm package") > -1) { | ||
lookFor("// Type definitions for", e.message); | ||
} | ||
else if (e.message.indexOf("export default") > -1) { | ||
lookFor("export default", e.message); | ||
} | ||
else { | ||
// should be unused! | ||
ctx.addFailureAt(0, 1, e.message); | ||
} | ||
// We're ignoring exceptions. | ||
} | ||
@@ -53,0 +187,0 @@ } |
{ | ||
"name": "dtslint", | ||
"version": "2.0.6", | ||
"version": "3.0.0", | ||
"description": "Runs tests on TypeScript definition files", | ||
@@ -31,3 +31,3 @@ "files": [ | ||
"definitelytyped-header-parser": "3.8.2", | ||
"dts-critic": "^2.2.4", | ||
"dts-critic": "^3.0.0", | ||
"fs-extra": "^6.0.1", | ||
@@ -40,9 +40,9 @@ "strip-json-comments": "^2.0.1", | ||
"@types/fs-extra": "^5.0.2", | ||
"@types/node": "^7.10.7", | ||
"@types/node": "12.0.x", | ||
"@types/strip-json-comments": "^0.0.28" | ||
}, | ||
"engines": { | ||
"node": ">=6.10.0" | ||
"node": ">=12.0.0" | ||
}, | ||
"license": "MIT" | ||
} |
Sorry, the diff of this file is not supported yet
194018
2641
+ Added@definitelytyped/header-parser@0.2.17(transitive)
+ Added@definitelytyped/typescript-versions@0.1.7(transitive)
+ Added@definitelytyped/utils@0.1.8(transitive)
+ Added@qiwi/npm-registry-client@8.9.1(transitive)
+ Added@types/node@18.19.76(transitive)
+ Addedajv@6.12.6(transitive)
+ Addedansi-regex@5.0.1(transitive)
+ Addedansi-styles@4.3.0(transitive)
+ Addedaproba@1.2.0(transitive)
+ Addedare-we-there-yet@1.1.7(transitive)
+ Addedasn1@0.2.6(transitive)
+ Addedassert-plus@1.0.0(transitive)
+ Addedasynckit@0.4.0(transitive)
+ Addedaws-sign2@0.7.0(transitive)
+ Addedaws4@1.13.2(transitive)
+ Addedb4a@1.6.7(transitive)
+ Addedbare-events@2.5.4(transitive)
+ Addedbcrypt-pbkdf@1.0.2(transitive)
+ Addedbrace-expansion@2.0.1(transitive)
+ Addedbuffer-from@1.1.2(transitive)
+ Addedbuiltins@1.0.3(transitive)
+ Addedcachedir@2.4.0(transitive)
+ Addedcaseless@0.12.0(transitive)
+ Addedcharm@1.0.2(transitive)
+ Addedchownr@2.0.0(transitive)
+ Addedcliui@6.0.0(transitive)
+ Addedcolor-convert@2.0.1(transitive)
+ Addedcolor-name@1.1.4(transitive)
+ Addedcombined-stream@1.0.8(transitive)
+ Addedconcat-stream@2.0.0(transitive)
+ Addedconsole-control-strings@1.1.0(transitive)
+ Addedcore-util-is@1.0.21.0.3(transitive)
+ Addeddashdash@1.14.1(transitive)
+ Addeddelayed-stream@1.0.0(transitive)
+ Addeddelegates@1.0.0(transitive)
+ Addeddts-critic@3.3.11(transitive)
+ Addedecc-jsbn@0.1.2(transitive)
+ Addedemoji-regex@8.0.0(transitive)
+ Addedextend@3.0.2(transitive)
+ Addedextsprintf@1.3.0(transitive)
+ Addedfast-deep-equal@3.1.3(transitive)
+ Addedfast-fifo@1.3.2(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedfind-up@4.1.0(transitive)
+ Addedforever-agent@0.6.1(transitive)
+ Addedform-data@2.3.3(transitive)
+ Addedfs-minipass@2.1.0(transitive)
+ Addedgauge@2.7.4(transitive)
+ Addedget-caller-file@2.0.5(transitive)
+ Addedgetpass@0.1.7(transitive)
+ Addedhar-schema@2.0.0(transitive)
+ Addedhar-validator@5.1.5(transitive)
+ Addedhas-unicode@2.0.1(transitive)
+ Addedhosted-git-info@4.1.0(transitive)
+ Addedhttp-signature@1.2.0(transitive)
+ Addedis-fullwidth-code-point@3.0.0(transitive)
+ Addedis-typedarray@1.0.0(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedisexe@3.1.1(transitive)
+ Addedisstream@0.1.2(transitive)
+ Addedjsbn@0.1.1(transitive)
+ Addedjson-schema@0.4.0(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson-stringify-safe@5.0.1(transitive)
+ Addedjsprim@1.4.2(transitive)
+ Addedlocate-path@5.0.0(transitive)
+ Addedlru-cache@6.0.0(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addedminimatch@9.0.5(transitive)
+ Addedminipass@3.3.65.0.0(transitive)
+ Addedminizlib@2.1.2(transitive)
+ Addedmkdirp@1.0.4(transitive)
+ Addednormalize-package-data@3.0.3(transitive)
+ Addednpm-package-arg@8.1.5(transitive)
+ Addednpmlog@4.1.2(transitive)
+ Addedoauth-sign@0.9.0(transitive)
+ Addedobject-assign@4.1.1(transitive)
+ Addedp-locate@4.1.0(transitive)
+ Addedpath-exists@4.0.0(transitive)
+ Addedperformance-now@2.1.0(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedpsl@1.15.0(transitive)
+ Addedpunycode@2.3.1(transitive)
+ Addedqs@6.5.3(transitive)
+ Addedreadable-stream@2.3.83.6.2(transitive)
+ Addedrequest@2.88.2(transitive)
+ Addedrequire-main-filename@2.0.0(transitive)
+ Addedretry@0.12.0(transitive)
+ Addedrimraf@3.0.2(transitive)
+ Addedsafe-buffer@5.1.25.2.1(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedsemver@7.7.1(transitive)
+ Addedslide@1.1.6(transitive)
+ Addedspdx-correct@3.2.0(transitive)
+ Addedspdx-exceptions@2.5.0(transitive)
+ Addedspdx-expression-parse@3.0.1(transitive)
+ Addedspdx-license-ids@3.0.21(transitive)
+ Addedsshpk@1.18.0(transitive)
+ Addedssri@8.0.1(transitive)
+ Addedstreamx@2.22.0(transitive)
+ Addedstring-width@4.2.3(transitive)
+ Addedstring_decoder@1.1.1(transitive)
+ Addedstrip-ansi@6.0.1(transitive)
+ Addedtar@6.2.1(transitive)
+ Addedtar-stream@3.1.7(transitive)
+ Addedtext-decoder@1.2.3(transitive)
+ Addedtmp@0.2.3(transitive)
+ Addedtough-cookie@2.5.0(transitive)
+ Addedtunnel-agent@0.6.0(transitive)
+ Addedtweetnacl@0.14.5(transitive)
+ Addedtypedarray@0.0.6(transitive)
+ Addedundici-types@5.26.5(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addeduuid@3.4.0(transitive)
+ Addedvalidate-npm-package-license@3.0.4(transitive)
+ Addedvalidate-npm-package-name@3.0.0(transitive)
+ Addedverror@1.10.0(transitive)
+ Addedwhich@4.0.0(transitive)
+ Addedwide-align@1.1.5(transitive)
+ Addedwrap-ansi@6.2.0(transitive)
+ Addedyallist@4.0.0(transitive)
+ Addedyargs@15.4.1(transitive)
+ Addedyargs-parser@18.1.3(transitive)
- Removedansi-regex@3.0.1(transitive)
- Removedcliui@4.1.0(transitive)
- Removedcross-spawn@6.0.6(transitive)
- Removeddts-critic@2.2.4(transitive)
- Removedend-of-stream@1.4.4(transitive)
- Removedexeca@1.0.0(transitive)
- Removedfind-up@3.0.0(transitive)
- Removedget-caller-file@1.0.3(transitive)
- Removedget-stream@4.1.0(transitive)
- Removedinvert-kv@2.0.0(transitive)
- Removedis-fullwidth-code-point@2.0.0(transitive)
- Removedis-stream@1.1.0(transitive)
- Removedisexe@2.0.0(transitive)
- Removedlcid@2.0.0(transitive)
- Removedlocate-path@3.0.0(transitive)
- Removedmap-age-cleaner@0.1.3(transitive)
- Removedmem@4.3.0(transitive)
- Removedmimic-fn@2.1.0(transitive)
- Removednice-try@1.0.5(transitive)
- Removednpm-run-path@2.0.2(transitive)
- Removedos-locale@3.1.0(transitive)
- Removedp-defer@1.0.0(transitive)
- Removedp-finally@1.0.0(transitive)
- Removedp-is-promise@2.1.0(transitive)
- Removedp-locate@3.0.0(transitive)
- Removedpath-exists@3.0.0(transitive)
- Removedpath-key@2.0.1(transitive)
- Removedpump@3.0.2(transitive)
- Removedrequire-main-filename@1.0.1(transitive)
- Removedshebang-command@1.2.0(transitive)
- Removedshebang-regex@1.0.0(transitive)
- Removedstring-width@2.1.1(transitive)
- Removedstrip-ansi@4.0.0(transitive)
- Removedstrip-eof@1.0.0(transitive)
- Removedwhich@1.3.1(transitive)
- Removedwrap-ansi@2.1.0(transitive)
- Removedyargs@12.0.5(transitive)
- Removedyargs-parser@11.1.1(transitive)
Updateddts-critic@^3.0.0