Skip to content

Commit 6121478

Browse files
authored
Feature: Better debug output with symbol source location in various places (#159)
* Feature: Better debug output for getting symbol location in source code * Add better debug information for parameter node parsing failures.
1 parent bc51a2b commit 6121478

File tree

5 files changed

+28
-9
lines changed

5 files changed

+28
-9
lines changed

packages/webdoc-parser/src/assembler/mod-resolve-assigned-members.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
// @flow
22

3-
import {type Symbol, addChildSymbol, findAccessedSymbol} from "../types/Symbol";
3+
import {
4+
type Symbol,
5+
addChildSymbol,
6+
findAccessedSymbol,
7+
printSourceLocation,
8+
} from "../types/Symbol";
49

510
// This mod resolves symbols were "assigned" to another symbol parent in source code. For example,
611

@@ -68,7 +73,8 @@ export default function resolveAssignedMembersRecursive(
6873
console.error("{@assembly-mod resolve-assigned-members} failed to resolve these symbols: ");
6974

7075
tryQueue.forEach((sym) => {
71-
console.error(`\t ${sym.canonicalName} [to ${sym.meta.object || ""}]`);
76+
console.error(`\t ${sym.canonicalName} [to ${sym.meta.object || ""}] ` +
77+
printSourceLocation(sym));
7278
});
7379
}
7480

packages/webdoc-parser/src/symbols-babel/build-symbol-tree.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ import {
4646
removeBlock,
4747
} from "../types/VariableRegistry";
4848

49+
import {parserLogger, tag} from "../Logger";
4950
import traverse, {type NodePath} from "@babel/traverse";
5051
import type {LanguageConfig} from "../types/LanguageIntegration";
5152
import type {SourceFile} from "@webdoc/types";
5253
import extract from "../extract";
5354
import {extractParams} from "./extract-metadata";
5455
import extractSymbol from "./extract-symbol";
55-
import {parserLogger} from "../Logger";
5656

5757
// TODO: This shouldn't really be a part of symbols-babel but rather should live with Symbol.js
5858
// in SymbolUtils.js
@@ -278,6 +278,11 @@ function captureSymbols(nodePath: NodePath, parent: Symbol): ?Symbol {
278278
for (let i = 0, j = params.length; i < j; i++) {
279279
declareParameter(params[i].identifier);
280280
}
281+
282+
if (params.flawed) {
283+
console.error(tag.Indexer, "^^^ Errors in parsing a parameter near " +
284+
fileName + ":" + (node && node.start ? node.start.line : "?"));
285+
}
281286
} else if (node.params) {
282287
registerParameters(node);
283288
}

packages/webdoc-parser/src/symbols-babel/extract-metadata.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ import {
116116
createSimpleKeywordType,
117117
} from "@webdoc/model";
118118

119+
import {parserLogger, tag} from "../Logger";
119120
import type {Symbol} from "../types/Symbol";
120121

121122
export const mode: {
@@ -242,10 +243,13 @@ export function extractParams(
242243
// "", " ", " ", " " or using &zwnj; because it is truly invisible
243244

244245
((params: any)).flawed = true;
245-
console.error("Object patterns as parameters can't be documented");
246+
parserLogger.error(tag.Indexer, "Object patterns as parameters can't be documented, at line");
247+
parserLogger.warn(tag.Indexer, JSON.stringify(paramNode, null, 2));
246248
} else {
247249
((params: any)).flawed = true;
248-
console.error("Parameter node couldn't be parsed");
250+
parserLogger.error(tag.Indexer, "Parameter node couldn't be parsed, " +
251+
"enable warning logs for more detail");
252+
parserLogger.warn(tag.Indexer, JSON.stringify(paramNode, null, 2));
249253
}
250254

251255
if (param && paramTypeAnnotation) {

packages/webdoc-parser/src/transformer/transform.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// @flow
22

33
import {type Doc, type RootDoc} from "@webdoc/types";
4+
import {type Symbol, printSourceLocation} from "../types/Symbol";
45
import {parserLogger, tag} from "../Logger";
5-
import {type Symbol} from "../types/Symbol";
66
import {addChildDoc} from "@webdoc/model";
77
import symbolToDoc from "./symbol-to-doc";
88

@@ -18,9 +18,7 @@ export function transformRecursive(symbol: Symbol, root: RootDoc): ?Doc {
1818
if (!doc && !symbol.isRoot) {
1919
parserLogger.error(tag.DocParser,
2020
`Failed to parse doc for ${symbol.simpleName}(@${symbol.canonicalName || "Unnamed"})` +
21-
`{@${symbol.loc.fileName || "<UNKNOWN_FILE>"}` +
22-
`<${symbol.loc.start ? symbol.loc.start.line : "NaN"},` +
23-
` ${symbol.loc.start ? symbol.loc.start.column : "NaN"}>}`);
21+
printSourceLocation(symbol));
2422
return;
2523
}
2624

packages/webdoc-parser/src/types/Symbol.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,12 @@ export function coalescePair(symbol: Symbol, pair: Symbol): Symbol {
282282
return symbol;
283283
}
284284

285+
export function printSourceLocation(symbol: Symbol): string {
286+
return `(in ${symbol.loc.fileName ?? "an unknown file"} at ` +
287+
`${symbol.loc.start ? symbol.loc.start.line : "NaN"}:` +
288+
`${symbol.loc.start ? symbol.loc.start.column : "NaN"})`;
289+
}
290+
285291
function areEqualLoc(doc1: Symbol, doc2: Symbol): boolean {
286292
return doc1.loc.fileName === doc2.loc.fileName &&
287293
doc1.loc.start && doc2.loc.start &&

0 commit comments

Comments
 (0)