Skip to content

Commit

Permalink
feat: add config options
Browse files Browse the repository at this point in the history
  • Loading branch information
mxsdev committed Oct 4, 2022
1 parent 8d9e0a6 commit d5f8b76
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 21 deletions.
33 changes: 27 additions & 6 deletions dist/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/util.d.ts
Expand Up @@ -25,4 +25,4 @@ export declare function createUnionType(typeChecker: ts.TypeChecker, types?: ts.
export declare function createIntersectionType(typeChecker: ts.TypeChecker, types?: ts.Type[], flags?: ts.TypeFlags): IntersectionType;
export declare function createSymbol(flags: ts.SymbolFlags, name: SymbolName, checkFlags?: number): TSSymbol;
export declare function getTypeOrDeclaredType(typeChecker: ts.TypeChecker, symbol: ts.Symbol, location?: ts.Node): ts.Type;
export declare function resolvedTypeToString(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile, ...args: (Parameters<ts.TypeChecker['typeToString']>)): string;
export declare function resolvedTypeToString(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile, type: ts.Type, enclosingDeclaration?: ts.Node, flags?: ts.NodeBuilderFlags): string;
7 changes: 3 additions & 4 deletions dist/util.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 31 additions & 7 deletions src/index.ts
Expand Up @@ -3,8 +3,10 @@ import { getTypeOrDeclaredType, resolvedTypeToString } from "./util";

function init(modules: { typescript: typeof import("typescript/lib/tsserverlibrary") }) {
const ts = modules.typescript;

function create(info: ts.server.PluginCreateInfo) {
const config = getConfig(info.config)

// Set up decorator object
const proxy: ts.LanguageService = Object.create(null);
for (let k of Object.keys(info.languageService) as Array<keyof ts.LanguageService>) {
Expand Down Expand Up @@ -40,14 +42,26 @@ function init(modules: { typescript: typeof import("typescript/lib/tsserverlibra

if(!prior?.displayParts) return prior

prior.displayParts.push({ kind: 'lineBreak', text: "\n\n" })
if(!config.includeOriginal) {
prior.displayParts = []
} else {
prior.displayParts.push({ kind: 'lineBreak', text: "\n\n" })
}

if(config.typePrefix) {
prior.displayParts.push({ kind: 'punctuation', text: '(' })
prior.displayParts.push({ kind: 'text', text: 'type' })
prior.displayParts.push({ kind: 'punctuation', text: ')' })
prior.displayParts.push({ kind: 'space', text: ' ' })
}

let typeFormatFlags = 0

prior.displayParts.push({ kind: 'punctuation', text: '(' })
prior.displayParts.push({ kind: 'text', text: 'type' })
prior.displayParts.push({ kind: 'punctuation', text: ')' })
prior.displayParts.push({ kind: 'space', text: ' ' })
if(config.multilineObjectLiterals) {
typeFormatFlags |= ts.NodeBuilderFlags.MultilineObjectLiterals
}

const typeString = resolvedTypeToString(typeChecker, sourceFile, expandedType, undefined, ts.TypeFormatFlags.MultilineObjectLiterals)
const typeString = resolvedTypeToString(typeChecker, sourceFile, expandedType, undefined, typeFormatFlags)

typeString.split("\n").forEach(line => {
prior.displayParts!.push({
Expand All @@ -70,4 +84,14 @@ function init(modules: { typescript: typeof import("typescript/lib/tsserverlibra
return { create };
}

function getConfig(config: any) {
const includeOriginal = config.includeOriginal ?? true

return {
multilineObjectLiterals: config.multilineObjectLiterals ?? true,
includeOriginal,
typePrefix: config.typePrefix ?? includeOriginal,
}
}

export = init;
5 changes: 2 additions & 3 deletions src/util.ts
Expand Up @@ -86,9 +86,8 @@ export function getTypeOrDeclaredType(typeChecker: ts.TypeChecker, symbol: ts.Sy
return type
}

export function resolvedTypeToString(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile, ...args: (Parameters<ts.TypeChecker['typeToString']>)) {
let [ type, enclosingDeclaration, flags = 0 ] = args
flags |= ts.TypeFormatFlags.InTypeAlias
export function resolvedTypeToString(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile, type: ts.Type, enclosingDeclaration?: ts.Node, flags: ts.NodeBuilderFlags = 0) {
flags |= ts.NodeBuilderFlags.InTypeAlias

const typeNode = typeChecker.typeToTypeNode(type, enclosingDeclaration, flags)
if(!typeNode) return ""
Expand Down

0 comments on commit d5f8b76

Please sign in to comment.