From 833d3f4bb431809412aefb83732f3897260caac7 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 14 Jul 2020 23:00:30 +0200 Subject: [PATCH] docgen: fix lint issues --- packages/docgen/src/compiler.ts | 12 ++++++------ packages/docgen/src/docgen/ApiDocGenerator.ts | 14 +++++++------- packages/docgen/src/docgen/MarkdownPrinter.ts | 7 +++---- packages/docgen/src/docgen/TypeLocator.ts | 12 ++++++------ .../docgen/src/docgen/TypescriptHighlighter.ts | 4 ++-- packages/docgen/src/docgen/sortSelector.ts | 7 +++---- 6 files changed, 27 insertions(+), 29 deletions(-) diff --git a/packages/docgen/src/compiler.ts b/packages/docgen/src/compiler.ts index 3a196ca709..61837ad1f8 100644 --- a/packages/docgen/src/compiler.ts +++ b/packages/docgen/src/compiler.ts @@ -17,28 +17,28 @@ import * as ts from 'typescript'; import { resolve, join, dirname } from 'path'; import { promisify } from 'util'; -import fs from 'fs'; +import fs from 'fs-extra'; import ApiDocGenerator from './docgen/ApiDocGenerator'; import sortSelector from './docgen/sortSelector'; import TypeLocator from './docgen/TypeLocator'; import ApiDocPrinter from './docgen/ApiDocPrinter'; import TypescriptHighlighter from './docgen/TypescriptHighlighter'; import MarkdownPrinter from './docgen/MarkdownPrinter'; -import { sync as mkdirpSync } from 'mkdirp'; const writeFile = promisify(fs.writeFile); function loadOptions(path: string): ts.CompilerOptions { - let { extends: parent, compilerOptions }: any = require(path); + const config: any = require(path); + let parent = config.extends as string | undefined; if (!parent) { - return compilerOptions; + return config.compilerOptions; } if (parent.startsWith('.')) { parent = join(dirname(path), parent); } - return { ...loadOptions(parent), ...compilerOptions }; + return { ...loadOptions(parent), ...config.compilerOptions }; } async function main() { @@ -84,7 +84,7 @@ async function main() { () => new MarkdownPrinter(new TypescriptHighlighter()), ); - mkdirpSync(resolve(apiRefsDir, 'docs')); + fs.ensureDirSync(resolve(apiRefsDir, 'docs')); await Promise.all( apiDocs.map(apiDoc => { diff --git a/packages/docgen/src/docgen/ApiDocGenerator.ts b/packages/docgen/src/docgen/ApiDocGenerator.ts index e1d1e0f5f1..1142f1155e 100644 --- a/packages/docgen/src/docgen/ApiDocGenerator.ts +++ b/packages/docgen/src/docgen/ApiDocGenerator.ts @@ -116,18 +116,18 @@ export default class ApiDocGenerator { objectLiteral: ts.ObjectLiteralExpression, propertyName: string, ): string { - const prop = objectLiteral.properties.filter( + const matchingProp = objectLiteral.properties.filter( prop => ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name) && prop.name.text === propertyName, )[0] as ts.PropertyAssignment; - if (!prop) { + if (!matchingProp) { throw new Error(`no identifier found for property ${propertyName}`); } - const { initializer } = prop; + const { initializer } = matchingProp; if (!ts.isStringLiteral(initializer)) { throw new Error(`no string literal for ${propertyName}`); } @@ -238,22 +238,22 @@ export default class ApiDocGenerator { type: ts.Type | undefined, ): undefined | { symbol: ts.Symbol; declaration: ts.Declaration } { if (!type) { - return; + return undefined; } const symbol = type.aliasSymbol || type.symbol; if (!symbol) { - return; + return undefined; } const [declaration] = symbol.declarations; // Don't generate standalone infos for type paramters if (ts.isTypeParameterDeclaration(declaration)) { - return; + return undefined; } if (!declaration.getSourceFile().fileName.startsWith(this.sourcePath)) { - return; + return undefined; } return { symbol, declaration }; diff --git a/packages/docgen/src/docgen/MarkdownPrinter.ts b/packages/docgen/src/docgen/MarkdownPrinter.ts index c33ecc76a8..36e7c8b1d6 100644 --- a/packages/docgen/src/docgen/MarkdownPrinter.ts +++ b/packages/docgen/src/docgen/MarkdownPrinter.ts @@ -108,7 +108,7 @@ export default class MarkdownPrinter { const parts: Array<{ text: string; path?: string }> = []; - const end = sortedLinks.reduce((prev, link) => { + const endLocation = sortedLinks.reduce((prev, link) => { const [start, end] = link.location; parts.push( { text: text.slice(prev, start) }, @@ -117,15 +117,14 @@ export default class MarkdownPrinter { return end; }, 0); - parts.push({ text: text.slice(end) }); + parts.push({ text: text.slice(endLocation) }); return parts .map(part => { if (part.path) { return `${this.escapeText(part.text)}`; - } else { - return this.highlighter.highlight(this.escapeText(part.text)); } + return this.highlighter.highlight(this.escapeText(part.text)); }) .join(''); } diff --git a/packages/docgen/src/docgen/TypeLocator.ts b/packages/docgen/src/docgen/TypeLocator.ts index 8342548e01..b960640559 100644 --- a/packages/docgen/src/docgen/TypeLocator.ts +++ b/packages/docgen/src/docgen/TypeLocator.ts @@ -95,30 +95,30 @@ export default class TypeLocator { | { constructorType: ts.Type; initializer: ts.NewExpression; name: string } | undefined { if (!ts.isVariableStatement(node)) { - return; + return undefined; } if ( !node.modifiers || !node.modifiers.some(mod => mod.kind === ts.SyntaxKind.ExportKeyword) ) { - return; + return undefined; } const { declarations } = node.declarationList; if (declarations.length !== 1) { - return; + return undefined; } const [declaration] = declarations; const { initializer, name } = declaration; if (!initializer || !name) { - return; + return undefined; } if (!ts.isNewExpression(initializer)) { - return; + return undefined; } if (!ts.isIdentifier(name)) { - return; + return undefined; } const constructorType = this.checker.getTypeAtLocation( diff --git a/packages/docgen/src/docgen/TypescriptHighlighter.ts b/packages/docgen/src/docgen/TypescriptHighlighter.ts index a16c9a2c28..4bbb6548dd 100644 --- a/packages/docgen/src/docgen/TypescriptHighlighter.ts +++ b/packages/docgen/src/docgen/TypescriptHighlighter.ts @@ -56,7 +56,7 @@ export default class TypescriptHighlighter implements Highlighter { ], // keywords ] as readonly [RegExp, string][]; - highlight(text: string): string { + highlight(fullText: string): string { // Each part is either plain text that can be highlighted or text that is already highlighted type HighlightPart = { text: string; highlighted?: boolean }; @@ -80,7 +80,7 @@ export default class TypescriptHighlighter implements Highlighter { // Order here is important, e.g. comments must be first to avoid string literals inside comments being highlighted return TypescriptHighlighter.highlighters .reduce((parts, highlighter) => flatMap(parts, painter(...highlighter)), [ - { text }, + { text: fullText }, ]) .map(({ text }) => text) .join(''); diff --git a/packages/docgen/src/docgen/sortSelector.ts b/packages/docgen/src/docgen/sortSelector.ts index 1ba7a7918d..7590ae39ec 100644 --- a/packages/docgen/src/docgen/sortSelector.ts +++ b/packages/docgen/src/docgen/sortSelector.ts @@ -21,14 +21,13 @@ export default function sortSelector( selector: (x: T) => any, ): (a: T, b: T) => -1 | 1 | 0 { return (a: T, b: T) => { - let aV = selector(a); - let bV = selector(b); + const aV = selector(a); + const bV = selector(b); if (aV < bV) { return -1; } else if (aV > bV) { return 1; - } else { - return 0; } + return 0; }; }