Skip to content

Commit

Permalink
feat: allow multiline printing
Browse files Browse the repository at this point in the history
  • Loading branch information
mxsdev committed Oct 4, 2022
1 parent 74bb144 commit cd3c164
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 16 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Sourcemaps
*.js.map

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

Expand Down
1 change: 1 addition & 0 deletions dist/merge.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
Original file line number Diff line number Diff line change
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, ...args: (Parameters<ts.TypeChecker['typeToString']>)): string;
export declare function resolvedTypeToString(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile, ...args: (Parameters<ts.TypeChecker['typeToString']>)): string;
13 changes: 10 additions & 3 deletions dist/util.js

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

14 changes: 11 additions & 3 deletions src/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,15 @@ export function getTypeOrDeclaredType(typeChecker: ts.TypeChecker, symbol: ts.Sy
return type
}

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

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

const printer = ts.createPrinter()
return printer.printNode(ts.EmitHint.Unspecified, typeNode, sourceFile)

// return typeChecker.typeToString(type, enclosingDeclaration, flags | ts.TypeFormatFlags.InTypeAlias)
}
8 changes: 4 additions & 4 deletions tests/baselines/reference/recursive.merged.types
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
=== recursive.ts ===

type Recursive = { a: { b: Recursive } }
> Recursive --- { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { ...
> Recursive --- { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { ...; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }
> { a: { b: Recursive } }
> a: { b: Recursive }
> a: { b: Recursive }
> a --- { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { ...
> a --- { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { ...; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }
> { b: Recursive }
> b: Recursive
> b: Recursive
> b --- { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { ...
> b --- { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { ...; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }
> Recursive
> Recursive --- { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { ...
> Recursive --- { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { b: { a: { ...; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; }
8 changes: 4 additions & 4 deletions tests/lib/baselines.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,21 +86,21 @@ export function generateMergeBaseline(sourceFile: ts.SourceFile, typeChecker: ts
return sourceFile
.getChildren()[0]!
.getChildren()
.map(c => generateMergeBaselineRecursive(c, typeChecker))
.map(c => generateMergeBaselineRecursive(c, typeChecker, sourceFile))
.join("\n\n")
}

function generateMergeBaselineRecursive(node: ts.Node, typeChecker: ts.TypeChecker, depth: number = 0): string {
function generateMergeBaselineRecursive(node: ts.Node, typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile, depth: number = 0): string {
const symbol = typeChecker.getSymbolAtLocation(node)

let line: string = `${node.getText()}`
if(symbol) {
const type = getTypeOrDeclaredType(typeChecker, symbol, node)
line += ` --- ${resolvedTypeToString(typeChecker, recursiveMergeIntersection(typeChecker, type))}`
line += ` --- ${resolvedTypeToString(typeChecker, sourceFile, recursiveMergeIntersection(typeChecker, type))}`
}

const childLines = node.getChildren()
.map(node => generateMergeBaselineRecursive(node, typeChecker, depth + 1))
.map(node => generateMergeBaselineRecursive(node, typeChecker, sourceFile, depth + 1))
.flatMap(text => text.split("\n"))
.filter(text => !!text)
.map(text => depth === 0 ? `> ${text}` : text)
Expand Down
3 changes: 2 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"noImplicitAny": true,
"rootDir": "src",
"outDir": "dist",
"declaration": true
"declaration": true,
"sourceMap": true
},
"include": [
"src/**/*"
Expand Down

0 comments on commit cd3c164

Please sign in to comment.