From e60ef6e7fe2f3cbefe7502efa2543cd8bdb0a28c Mon Sep 17 00:00:00 2001 From: Anthony Ciccarello Date: Sun, 4 Mar 2018 22:31:55 -0700 Subject: [PATCH] fix null reference parsing nonexported abstract class (#716) closes #691 --- src/lib/converter/nodes/class.ts | 2 +- src/test/converter.ts | 40 +- src/test/converter/class/class.ts | 26 +- .../class/specs-without-exported.json | 976 ++++++++++++++++++ src/test/converter/class/specs.json | 123 ++- 5 files changed, 1128 insertions(+), 39 deletions(-) create mode 100644 src/test/converter/class/specs-without-exported.json diff --git a/src/lib/converter/nodes/class.ts b/src/lib/converter/nodes/class.ts index 66d13be6f..41b05d6e6 100644 --- a/src/lib/converter/nodes/class.ts +++ b/src/lib/converter/nodes/class.ts @@ -30,7 +30,7 @@ export class ClassConverter extends ConverterNodeComponent } else { reflection = createDeclaration(context, node, ReflectionKind.Class); // set possible abstract flag here, where node is not the inherited parent - if (node.modifiers && node.modifiers.some( m => m.kind === ts.SyntaxKind.AbstractKeyword )) { + if (reflection && node.modifiers && node.modifiers.some( m => m.kind === ts.SyntaxKind.AbstractKeyword )) { reflection.setFlag(ReflectionFlag.Abstract, true); } } diff --git a/src/test/converter.ts b/src/test/converter.ts index 7e135ead5..0f9e8f716 100644 --- a/src/test/converter.ts +++ b/src/test/converter.ts @@ -100,7 +100,8 @@ describe('Converter', function() { describe('Converter with excludeNotExported=true', function() { const base = Path.join(__dirname, 'converter'); - const path = Path.join(base, 'export-with-local'); + const exportWithLocalDir = Path.join(base, 'export-with-local'); + const classDir = Path.join(base, 'class'); let app: Application; it('constructs', function() { @@ -117,17 +118,36 @@ describe('Converter with excludeNotExported=true', function() { let result: ProjectReflection; - it('converts fixtures', function() { - resetReflectionID(); - result = app.convert(app.expandInputFiles([path])); - Assert(result instanceof ProjectReflection, 'No reflection returned'); + describe('export-with-local', () => { + it('converts fixtures', function() { + resetReflectionID(); + result = app.convert(app.expandInputFiles([exportWithLocalDir])); + Assert(result instanceof ProjectReflection, 'No reflection returned'); + }); + + it('matches specs', function() { + const specs = JSON.parse(FS.readFileSync(Path.join(exportWithLocalDir, 'specs-without-exported.json')).toString()); + let data = JSON.stringify(result.toObject(), null, ' '); + data = data.split(normalizePath(base)).join('%BASE%'); + + compareReflections(JSON.parse(data), specs); + }); }); - it('matches specs', function() { - const specs = JSON.parse(FS.readFileSync(Path.join(path, 'specs-without-exported.json')).toString()); - let data = JSON.stringify(result.toObject(), null, ' '); - data = data.split(normalizePath(base)).join('%BASE%'); + describe('class', () => { + it('converts fixtures', function() { + resetReflectionID(); + result = app.convert(app.expandInputFiles([classDir])); + Assert(result instanceof ProjectReflection, 'No reflection returned'); + }); + + it('matches specs', function() { + const specs = JSON.parse(FS.readFileSync(Path.join(classDir, 'specs-without-exported.json')).toString()); + let data = JSON.stringify(result.toObject(), null, ' '); + data = data.split(normalizePath(base)).join('%BASE%'); - compareReflections(JSON.parse(data), specs); + compareReflections(JSON.parse(data), specs); + }); }); + }); diff --git a/src/test/converter/class/class.ts b/src/test/converter/class/class.ts index c315d3882..f27bbed80 100644 --- a/src/test/converter/class/class.ts +++ b/src/test/converter/class/class.ts @@ -10,18 +10,17 @@ export class TestClass { /** * publicProperty short text. */ - public publicProperty:string; + public publicProperty: string; /** * privateProperty short text. */ - private privateProperty:number[]; + private privateProperty: number[]; /** * privateProperty short text. */ - static staticProperty:TestClass; - + static staticProperty: TestClass; /** * Constructor short text. @@ -49,9 +48,7 @@ export class TestClass { static staticMethod() {} } - -export class TestSubClass extends TestClass -{ +export class TestSubClass extends TestClass { /** * publicMethod short text. */ @@ -75,7 +72,6 @@ export class TestSubClass extends TestClass } } - export abstract class TestAbstractClass { abstract myAbstractProperty: string; @@ -86,4 +82,16 @@ export class TestAbstractClassImplementation extends TestAbstractClass { myAbstractProperty: string; protected myAbstractMethod(): void { } -} \ No newline at end of file +} + +/** + * This class will not appear when `excludeNotExported=true` + */ +abstract class NotExportedClass { + /** + * Adds two numbers + */ + add(a: number, b: number) { + a + b; + } +} diff --git a/src/test/converter/class/specs-without-exported.json b/src/test/converter/class/specs-without-exported.json new file mode 100644 index 000000000..10d6c01b9 --- /dev/null +++ b/src/test/converter/class/specs-without-exported.json @@ -0,0 +1,976 @@ +{ + "id": 0, + "name": "typedoc", + "kind": 0, + "flags": {}, + "children": [ + { + "id": 1, + "name": "\"class\"", + "kind": 1, + "kindString": "External module", + "flags": { + "isExported": true + }, + "originalName": "%BASE%/class/class.ts", + "children": [ + { + "id": 34, + "name": "TestAbstractClass", + "kind": 128, + "kindString": "Class", + "flags": { + "isExported": true, + "isAbstract": true + }, + "children": [ + { + "id": 35, + "name": "myAbstractProperty", + "kind": 1024, + "kindString": "Property", + "flags": { + "isExported": true, + "isAbstract": true + }, + "sources": [ + { + "fileName": "class.ts", + "line": 76, + "character": 31 + } + ], + "type": { + "type": "intrinsic", + "name": "string" + } + }, + { + "id": 36, + "name": "myAbstractMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isExported": true, + "isProtected": true, + "isAbstract": true + }, + "signatures": [ + { + "id": 37, + "name": "myAbstractMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "type": { + "type": "intrinsic", + "name": "void" + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 78, + "character": 39 + } + ] + } + ], + "groups": [ + { + "title": "Properties", + "kind": 1024, + "children": [ + 35 + ] + }, + { + "title": "Methods", + "kind": 2048, + "children": [ + 36 + ] + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 75, + "character": 39 + } + ], + "extendedBy": [ + { + "type": "reference", + "name": "TestAbstractClassImplementation", + "id": 38 + } + ] + }, + { + "id": 38, + "name": "TestAbstractClassImplementation", + "kind": 128, + "kindString": "Class", + "flags": { + "isExported": true + }, + "children": [ + { + "id": 39, + "name": "myAbstractProperty", + "kind": 1024, + "kindString": "Property", + "flags": { + "isExported": true + }, + "sources": [ + { + "fileName": "class.ts", + "line": 82, + "character": 22 + } + ], + "type": { + "type": "intrinsic", + "name": "string" + }, + "overwrites": { + "type": "reference", + "name": "TestAbstractClass.myAbstractProperty", + "id": 35 + } + }, + { + "id": 40, + "name": "myAbstractMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isExported": true, + "isProtected": true + }, + "signatures": [ + { + "id": 41, + "name": "myAbstractMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "type": { + "type": "intrinsic", + "name": "void" + }, + "overwrites": { + "type": "reference", + "name": "TestAbstractClass.myAbstractMethod", + "id": 36 + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 84, + "character": 30 + } + ], + "overwrites": { + "type": "reference", + "name": "TestAbstractClass.myAbstractMethod", + "id": 36 + } + } + ], + "groups": [ + { + "title": "Properties", + "kind": 1024, + "children": [ + 39 + ] + }, + { + "title": "Methods", + "kind": 2048, + "children": [ + 40 + ] + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 81, + "character": 44 + } + ], + "extendedTypes": [ + { + "type": "reference", + "name": "TestAbstractClass", + "id": 34 + } + ] + }, + { + "id": 2, + "name": "TestClass", + "kind": 128, + "kindString": "Class", + "flags": { + "isExported": true + }, + "comment": { + "shortText": "TestClass comment short text.", + "text": "TestClass comment text.\n", + "tags": [ + { + "tag": "see", + "text": "[[TestClass]] @ fixtures\n" + } + ] + }, + "children": [ + { + "id": 6, + "name": "constructor", + "kind": 512, + "kindString": "Constructor", + "flags": { + "isExported": true + }, + "comment": { + "shortText": "Constructor short text." + }, + "signatures": [ + { + "id": 7, + "name": "new TestClass", + "kind": 16384, + "kindString": "Constructor signature", + "flags": {}, + "comment": { + "shortText": "Constructor short text." + }, + "type": { + "type": "reference", + "name": "TestClass", + "id": 2 + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 23, + "character": 37 + } + ] + }, + { + "id": 4, + "name": "privateProperty", + "kind": 1024, + "kindString": "Property", + "flags": { + "isPrivate": true, + "isExported": true + }, + "comment": { + "shortText": "privateProperty short text." + }, + "sources": [ + { + "fileName": "class.ts", + "line": 18, + "character": 27 + } + ], + "type": { + "type": "array", + "elementType": { + "type": "intrinsic", + "name": "number" + } + } + }, + { + "id": 3, + "name": "publicProperty", + "kind": 1024, + "kindString": "Property", + "flags": { + "isExported": true, + "isPublic": true + }, + "comment": { + "shortText": "publicProperty short text." + }, + "sources": [ + { + "fileName": "class.ts", + "line": 13, + "character": 25 + } + ], + "type": { + "type": "intrinsic", + "name": "string" + } + }, + { + "id": 5, + "name": "staticProperty", + "kind": 1024, + "kindString": "Property", + "flags": { + "isStatic": true, + "isExported": true + }, + "comment": { + "shortText": "privateProperty short text." + }, + "sources": [ + { + "fileName": "class.ts", + "line": 23, + "character": 25 + } + ], + "type": { + "type": "reference", + "name": "TestClass", + "id": 2 + } + }, + { + "id": 12, + "name": "privateMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isPrivate": true, + "isExported": true + }, + "signatures": [ + { + "id": 13, + "name": "privateMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "privateMethod short text." + }, + "type": { + "type": "intrinsic", + "name": "void" + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 43, + "character": 25 + } + ] + }, + { + "id": 10, + "name": "protectedMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isExported": true, + "isProtected": true + }, + "signatures": [ + { + "id": 11, + "name": "protectedMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "protectedMethod short text." + }, + "type": { + "type": "intrinsic", + "name": "void" + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 38, + "character": 29 + } + ] + }, + { + "id": 8, + "name": "publicMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isExported": true, + "isPublic": true + }, + "signatures": [ + { + "id": 9, + "name": "publicMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "publicMethod short text." + }, + "type": { + "type": "intrinsic", + "name": "void" + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 33, + "character": 23 + } + ] + }, + { + "id": 14, + "name": "staticMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isStatic": true, + "isExported": true + }, + "signatures": [ + { + "id": 15, + "name": "staticMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "staticMethod short text." + }, + "type": { + "type": "intrinsic", + "name": "void" + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 48, + "character": 23 + } + ] + } + ], + "groups": [ + { + "title": "Constructors", + "kind": 512, + "children": [ + 6 + ] + }, + { + "title": "Properties", + "kind": 1024, + "children": [ + 4, + 3, + 5 + ] + }, + { + "title": "Methods", + "kind": 2048, + "children": [ + 12, + 10, + 8, + 14 + ] + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 8, + "character": 22 + } + ], + "extendedBy": [ + { + "type": "reference", + "name": "TestSubClass", + "id": 16 + } + ] + }, + { + "id": 16, + "name": "TestSubClass", + "kind": 128, + "kindString": "Class", + "flags": { + "isExported": true + }, + "children": [ + { + "id": 21, + "name": "constructor", + "kind": 512, + "kindString": "Constructor", + "flags": { + "isExported": true + }, + "comment": { + "shortText": "Constructor short text." + }, + "signatures": [ + { + "id": 25, + "name": "new TestSubClass", + "kind": 16384, + "kindString": "Constructor signature", + "flags": {}, + "comment": { + "shortText": "Constructor short text." + }, + "parameters": [ + { + "id": 26, + "name": "p1", + "kind": 32768, + "kindString": "Parameter", + "flags": {}, + "comment": { + "shortText": "Constructor param" + }, + "type": { + "type": "intrinsic", + "name": "any" + } + }, + { + "id": 27, + "name": "p2", + "kind": 32768, + "kindString": "Parameter", + "flags": {}, + "comment": { + "shortText": "Private string property" + }, + "type": { + "type": "intrinsic", + "name": "string" + } + }, + { + "id": 28, + "name": "p3", + "kind": 32768, + "kindString": "Parameter", + "flags": {}, + "comment": { + "shortText": "Public number property" + }, + "type": { + "type": "intrinsic", + "name": "number" + } + }, + { + "id": 29, + "name": "p4", + "kind": 32768, + "kindString": "Parameter", + "flags": {}, + "comment": { + "shortText": "Public implicit any property\n" + }, + "type": { + "type": "intrinsic", + "name": "any" + } + } + ], + "type": { + "type": "reference", + "name": "TestSubClass", + "id": 16 + }, + "overwrites": { + "type": "reference", + "name": "TestClass.__constructor", + "id": 6 + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 60, + "character": 34 + } + ], + "overwrites": { + "type": "reference", + "name": "TestClass.__constructor", + "id": 6 + } + }, + { + "id": 22, + "name": "p2", + "kind": 1024, + "kindString": "Property", + "flags": { + "isPrivate": true, + "isConstructorProperty": true, + "isExported": true + }, + "comment": { + "shortText": "Private string property" + }, + "sources": [ + { + "fileName": "class.ts", + "line": 70, + "character": 30 + } + ], + "type": { + "type": "intrinsic", + "name": "string" + } + }, + { + "id": 23, + "name": "p3", + "kind": 1024, + "kindString": "Property", + "flags": { + "isConstructorProperty": true, + "isExported": true, + "isPublic": true + }, + "comment": { + "shortText": "Public number property" + }, + "sources": [ + { + "fileName": "class.ts", + "line": 70, + "character": 49 + } + ], + "type": { + "type": "intrinsic", + "name": "number" + } + }, + { + "id": 24, + "name": "p4", + "kind": 1024, + "kindString": "Property", + "flags": { + "isConstructorProperty": true, + "isExported": true, + "isPublic": true + }, + "comment": { + "shortText": "Public implicit any property\n" + }, + "sources": [ + { + "fileName": "class.ts", + "line": 70, + "character": 68 + } + ], + "type": { + "type": "intrinsic", + "name": "any" + } + }, + { + "id": 30, + "name": "publicProperty", + "kind": 1024, + "kindString": "Property", + "flags": { + "isExported": true, + "isPublic": true + }, + "comment": { + "shortText": "publicProperty short text." + }, + "sources": [ + { + "fileName": "class.ts", + "line": 13, + "character": 25 + } + ], + "type": { + "type": "intrinsic", + "name": "string" + }, + "inheritedFrom": { + "type": "reference", + "name": "TestClass.publicProperty", + "id": 3 + } + }, + { + "id": 31, + "name": "staticProperty", + "kind": 1024, + "kindString": "Property", + "flags": { + "isStatic": true, + "isExported": true + }, + "comment": { + "shortText": "privateProperty short text." + }, + "sources": [ + { + "fileName": "class.ts", + "line": 23, + "character": 25 + } + ], + "type": { + "type": "reference", + "name": "TestClass", + "id": 2 + }, + "inheritedFrom": { + "type": "reference", + "name": "TestClass.staticProperty", + "id": 5 + } + }, + { + "id": 19, + "name": "protectedMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isExported": true, + "isProtected": true + }, + "signatures": [ + { + "id": 20, + "name": "protectedMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "protectedMethod short text." + }, + "type": { + "type": "intrinsic", + "name": "void" + }, + "overwrites": { + "type": "reference", + "name": "TestClass.protectedMethod", + "id": 10 + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 60, + "character": 29 + } + ], + "overwrites": { + "type": "reference", + "name": "TestClass.protectedMethod", + "id": 10 + } + }, + { + "id": 17, + "name": "publicMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isExported": true, + "isPublic": true + }, + "signatures": [ + { + "id": 18, + "name": "publicMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "publicMethod short text." + }, + "type": { + "type": "intrinsic", + "name": "void" + }, + "overwrites": { + "type": "reference", + "name": "TestClass.publicMethod", + "id": 8 + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 55, + "character": 23 + } + ], + "overwrites": { + "type": "reference", + "name": "TestClass.publicMethod", + "id": 8 + } + }, + { + "id": 32, + "name": "staticMethod", + "kind": 2048, + "kindString": "Method", + "flags": { + "isStatic": true, + "isExported": true + }, + "signatures": [ + { + "id": 33, + "name": "staticMethod", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "staticMethod short text." + }, + "type": { + "type": "intrinsic", + "name": "void" + }, + "inheritedFrom": { + "type": "reference", + "name": "TestClass.staticMethod", + "id": 14 + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 48, + "character": 23 + } + ], + "inheritedFrom": { + "type": "reference", + "name": "TestClass.staticMethod", + "id": 14 + } + } + ], + "groups": [ + { + "title": "Constructors", + "kind": 512, + "children": [ + 21 + ] + }, + { + "title": "Properties", + "kind": 1024, + "children": [ + 22, + 23, + 24, + 30, + 31 + ] + }, + { + "title": "Methods", + "kind": 2048, + "children": [ + 19, + 17, + 32 + ] + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 51, + "character": 25 + } + ], + "extendedTypes": [ + { + "type": "reference", + "name": "TestClass", + "id": 2 + } + ] + } + ], + "groups": [ + { + "title": "Classes", + "kind": 128, + "children": [ + 34, + 38, + 2, + 16 + ] + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 1, + "character": 0 + } + ] + } + ], + "groups": [ + { + "title": "External modules", + "kind": 1, + "children": [ + 1 + ] + } + ] +} \ No newline at end of file diff --git a/src/test/converter/class/specs.json b/src/test/converter/class/specs.json index d8d9ce427..5acce0140 100644 --- a/src/test/converter/class/specs.json +++ b/src/test/converter/class/specs.json @@ -14,6 +14,90 @@ }, "originalName": "%BASE%/class/class.ts", "children": [ + { + "id": 42, + "name": "NotExportedClass", + "kind": 128, + "kindString": "Class", + "flags": { + "isAbstract": true + }, + "comment": { + "shortText": "This class will not appear when `excludeNotExported=true`" + }, + "children": [ + { + "id": 43, + "name": "add", + "kind": 2048, + "kindString": "Method", + "flags": {}, + "signatures": [ + { + "id": 44, + "name": "add", + "kind": 4096, + "kindString": "Call signature", + "flags": {}, + "comment": { + "shortText": "Adds two numbers" + }, + "parameters": [ + { + "id": 45, + "name": "a", + "kind": 32768, + "kindString": "Parameter", + "flags": {}, + "type": { + "type": "intrinsic", + "name": "number" + } + }, + { + "id": 46, + "name": "b", + "kind": 32768, + "kindString": "Parameter", + "flags": {}, + "type": { + "type": "intrinsic", + "name": "number" + } + } + ], + "type": { + "type": "intrinsic", + "name": "void" + } + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 94, + "character": 7 + } + ] + } + ], + "groups": [ + { + "title": "Methods", + "kind": 2048, + "children": [ + 43 + ] + } + ], + "sources": [ + { + "fileName": "class.ts", + "line": 90, + "character": 31 + } + ] + }, { "id": 34, "name": "TestAbstractClass", @@ -36,7 +120,7 @@ "sources": [ { "fileName": "class.ts", - "line": 80, + "line": 76, "character": 31 } ], @@ -71,7 +155,7 @@ "sources": [ { "fileName": "class.ts", - "line": 82, + "line": 78, "character": 39 } ] @@ -96,7 +180,7 @@ "sources": [ { "fileName": "class.ts", - "line": 79, + "line": 75, "character": 39 } ], @@ -128,7 +212,7 @@ "sources": [ { "fileName": "class.ts", - "line": 86, + "line": 82, "character": 22 } ], @@ -172,7 +256,7 @@ "sources": [ { "fileName": "class.ts", - "line": 88, + "line": 84, "character": 30 } ], @@ -202,7 +286,7 @@ "sources": [ { "fileName": "class.ts", - "line": 85, + "line": 81, "character": 44 } ], @@ -265,7 +349,7 @@ { "fileName": "class.ts", "line": 23, - "character": 36 + "character": 37 } ] }, @@ -373,7 +457,7 @@ "sources": [ { "fileName": "class.ts", - "line": 44, + "line": 43, "character": 25 } ] @@ -406,7 +490,7 @@ "sources": [ { "fileName": "class.ts", - "line": 39, + "line": 38, "character": 29 } ] @@ -439,7 +523,7 @@ "sources": [ { "fileName": "class.ts", - "line": 34, + "line": 33, "character": 23 } ] @@ -472,7 +556,7 @@ "sources": [ { "fileName": "class.ts", - "line": 49, + "line": 48, "character": 23 } ] @@ -624,7 +708,7 @@ "sources": [ { "fileName": "class.ts", - "line": 63, + "line": 60, "character": 34 } ], @@ -650,7 +734,7 @@ "sources": [ { "fileName": "class.ts", - "line": 73, + "line": 70, "character": 30 } ], @@ -675,7 +759,7 @@ "sources": [ { "fileName": "class.ts", - "line": 73, + "line": 70, "character": 49 } ], @@ -700,7 +784,7 @@ "sources": [ { "fileName": "class.ts", - "line": 73, + "line": 70, "character": 68 } ], @@ -801,7 +885,7 @@ "sources": [ { "fileName": "class.ts", - "line": 63, + "line": 60, "character": 29 } ], @@ -844,7 +928,7 @@ "sources": [ { "fileName": "class.ts", - "line": 58, + "line": 55, "character": 23 } ], @@ -887,7 +971,7 @@ "sources": [ { "fileName": "class.ts", - "line": 49, + "line": 48, "character": 23 } ], @@ -930,7 +1014,7 @@ "sources": [ { "fileName": "class.ts", - "line": 53, + "line": 51, "character": 25 } ], @@ -948,6 +1032,7 @@ "title": "Classes", "kind": 128, "children": [ + 42, 34, 38, 2,