Skip to content

Support for understanding some JSDoc annotations within JavaScript files. #2646

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 126 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
f5eb61a
Add support for parsing JSDoc types.
CyrusNajmabadi Apr 6, 2015
6b51c54
Tests for jsdoc comment parsing.
CyrusNajmabadi Apr 6, 2015
4dba649
Additional test.
CyrusNajmabadi Apr 6, 2015
a63e260
Additional jsdoc tests. Simplify test output.
CyrusNajmabadi Apr 7, 2015
803a8e2
Add test for non-nullable type.
CyrusNajmabadi Apr 7, 2015
b5dfb0d
Add tests for record types.
CyrusNajmabadi Apr 7, 2015
80803ca
tests for parsing generics.
CyrusNajmabadi Apr 7, 2015
bc1659a
Add negative tests for parsing jsdoc types.
CyrusNajmabadi Apr 7, 2015
57e9c94
Add additional negative test.
CyrusNajmabadi Apr 7, 2015
c8876b0
Simplify code.
CyrusNajmabadi Apr 7, 2015
8ba61f6
Mark if nodes were parsed from a javascript file or not.
CyrusNajmabadi Apr 7, 2015
50bb499
Support passing a start/length when creating a scanner.
CyrusNajmabadi Apr 7, 2015
604988c
Add support for parsing JSDoc comments.
CyrusNajmabadi Apr 7, 2015
2e58435
Add tests for parsing JSDoc comments.
CyrusNajmabadi Apr 7, 2015
3a33884
Add support for converting JSDoc types to our own types.
CyrusNajmabadi Apr 7, 2015
6292f3e
Add tests for JSDoc comment intellisense.
CyrusNajmabadi Apr 8, 2015
39c8c0d
Add support for function return types in JSDoc comments.
CyrusNajmabadi Apr 8, 2015
c8e106e
Don't use a sourceFile if one isn't passed in.
CyrusNajmabadi Apr 8, 2015
cef25bf
Only check source file when we have one.
CyrusNajmabadi Apr 8, 2015
d886b0f
Rename property. Add walking for jsdoc nodes.
CyrusNajmabadi Apr 8, 2015
e8a3d24
Set parent pointers for JSDoc comments.
CyrusNajmabadi Apr 8, 2015
d319e86
Remove special casing for nodes without parents now that we are prope…
CyrusNajmabadi Apr 8, 2015
047ac2c
Use actual type parameter nodes in doc comments.
CyrusNajmabadi Apr 8, 2015
0cb45c5
Add support for generic type parameters in JSDoc comments.
CyrusNajmabadi Apr 8, 2015
7ff85b3
Only clear children if they exist.
CyrusNajmabadi Apr 8, 2015
8564a8b
Add support for variadic JSDoc types.
CyrusNajmabadi Apr 8, 2015
cd2d5cd
Property show variadic parameters for javascript functions.
CyrusNajmabadi Apr 8, 2015
2cb375a
Share code for getting information about a parameter from a JSDoc com…
CyrusNajmabadi Apr 8, 2015
c8d8e0b
Simplify parameter handling code.
CyrusNajmabadi Apr 8, 2015
e8e1819
Report error when ... is used in a .js file.
CyrusNajmabadi Apr 8, 2015
d1cf715
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 12, 2015
e0837f8
Treat JSDoc types as actual Typenodes.
CyrusNajmabadi Apr 12, 2015
c4ee838
Use a single getTypeFromTypeNode function for normal types and JSDocT…
CyrusNajmabadi Apr 12, 2015
8622b35
initial support for function types.
CyrusNajmabadi Apr 12, 2015
e7f61e6
Add support for JSDoc construct signatures.
CyrusNajmabadi Apr 12, 2015
17d80e7
additional test.
CyrusNajmabadi Apr 12, 2015
ed8afa2
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 14, 2015
7d2dd0c
Updating baselines.
CyrusNajmabadi Apr 14, 2015
c405e6a
Handle 'returns' inside JSDoc comments
CyrusNajmabadi Apr 14, 2015
6561906
Add support for top level JSDoc union types.
CyrusNajmabadi Apr 14, 2015
6599a4b
Skip whitespace before parsing out a type.
CyrusNajmabadi Apr 14, 2015
49f8a41
Add support for param tags where the type follows the identifier name.
CyrusNajmabadi Apr 14, 2015
dcfb932
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 14, 2015
6732e21
Add support for bracketed JSDoc parameter names.
CyrusNajmabadi Apr 15, 2015
da256dd
Delete empty test.
CyrusNajmabadi Apr 15, 2015
613bb30
Supported bracketed parameter names with an optional initializer.
CyrusNajmabadi Apr 15, 2015
3e04643
Add support for parsing JSDoc array types.
CyrusNajmabadi Apr 15, 2015
f190ac8
Add type checking for JSDoc array types.
CyrusNajmabadi Apr 15, 2015
6c60dad
Add support for parsing nullable/non-nullable types with syntax at th…
CyrusNajmabadi Apr 15, 2015
e43fc69
Support arbitrary identifier names as type reference names in JSDoc c…
CyrusNajmabadi Apr 15, 2015
0884fdb
Use undefinedType for JSDoc type results, not 'undefined'
CyrusNajmabadi Apr 15, 2015
2bb5e5a
Add support for tuple types in JSDoc types.
CyrusNajmabadi Apr 15, 2015
96f20da
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 16, 2015
0c8e669
Properly set parents for all js doc nodes.
CyrusNajmabadi Apr 16, 2015
dbf6e07
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 16, 2015
6ac6ed8
Simplify initialization/cleanup in the parser.
CyrusNajmabadi Apr 16, 2015
9169acf
Proactively parse out js doc comments for .js files.
CyrusNajmabadi Apr 16, 2015
8645b69
Utilize the core parsing functionality to support parsing JSDoc expre…
CyrusNajmabadi Apr 16, 2015
5544639
Add test for javascript syntactic diagnostics.
CyrusNajmabadi Apr 16, 2015
4840d69
Move binding code back into the binder.
CyrusNajmabadi Apr 16, 2015
a9cd568
Fix spacing.
CyrusNajmabadi Apr 16, 2015
ab07292
Simplify checker.
CyrusNajmabadi Apr 16, 2015
3710101
Remove unnecessary file.
CyrusNajmabadi Apr 16, 2015
26e94df
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 17, 2015
5e2e77e
Handle binding of JSDocFunctionTypes in a uniform manner with Consruc…
CyrusNajmabadi Apr 17, 2015
9b7cf50
Simplify binding of JSDocFunctionTypes.
CyrusNajmabadi Apr 17, 2015
f261ea9
Simplify recursion in the binder. Always go through bindChildren.
CyrusNajmabadi Apr 17, 2015
b406d5a
CR feedback.
CyrusNajmabadi Apr 17, 2015
ad4a172
CR feedback.
CyrusNajmabadi Apr 17, 2015
d4911b7
CR feedback.
CyrusNajmabadi Apr 17, 2015
72495f8
CR feedback.
CyrusNajmabadi Apr 17, 2015
0c83e46
CR feedback.
CyrusNajmabadi Apr 17, 2015
05ffaaf
CR feedback.
CyrusNajmabadi Apr 17, 2015
28c80c3
CR feedback.
CyrusNajmabadi Apr 17, 2015
c92c63b
CR feedback.
CyrusNajmabadi Apr 17, 2015
6f2d1b7
CR feedback.
CyrusNajmabadi Apr 17, 2015
7f28fd2
CR feedback.
CyrusNajmabadi Apr 17, 2015
91cc72a
Merge branch 'getTypeFromTypeNode' into jsDocSupport
CyrusNajmabadi Apr 17, 2015
a33f703
CR feedback.
CyrusNajmabadi Apr 17, 2015
48a703b
CR feedback.
CyrusNajmabadi Apr 17, 2015
6157ac7
CR feedback.
CyrusNajmabadi Apr 17, 2015
01143cf
CR feedback.
CyrusNajmabadi Apr 17, 2015
de5e13c
CR feedback.
CyrusNajmabadi Apr 17, 2015
92f696d
CR feedback.
CyrusNajmabadi Apr 17, 2015
57d01df
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 17, 2015
da04504
Merge branch 'getTypeFromTypeNode' into jsDocSupport
CyrusNajmabadi Apr 17, 2015
95ca000
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 17, 2015
a3f3baa
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 17, 2015
64b9792
Remove code.
CyrusNajmabadi Apr 17, 2015
580db27
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 20, 2015
d76f415
Type JSDocRecordMembers to look like PropertyDeclarations.
CyrusNajmabadi Apr 20, 2015
316d25c
Add support for object literals in JSDoc comments.
CyrusNajmabadi Apr 20, 2015
548aa85
Add support for 'this-types' from JSDoc comments.
CyrusNajmabadi Apr 20, 2015
a6a57c2
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 23, 2015
393eaa1
Get all members of the types of a union type for javascript completions.
CyrusNajmabadi Apr 23, 2015
6d186cb
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 24, 2015
f1d1a66
PR feedback.
CyrusNajmabadi Apr 24, 2015
43c1796
Rename type.
CyrusNajmabadi Apr 25, 2015
b16be6c
Represent jsdoc comments in the tree as an actual node.
CyrusNajmabadi Apr 26, 2015
fea1485
Properly set pos/end on template tags.
CyrusNajmabadi Apr 26, 2015
48a6554
Remove the JSDocCommentInfo type. It's only used for testing now.
CyrusNajmabadi Apr 26, 2015
507caf7
Remove the JSDocCommentInfo temporary type.
CyrusNajmabadi Apr 26, 2015
f915d6f
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Apr 27, 2015
5d6a1e8
Use real type nodes for primitive types.
CyrusNajmabadi Apr 27, 2015
47ad2f5
Add support for classifying jsdoc comments
CyrusNajmabadi Apr 27, 2015
f505486
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 4, 2015
fdc9ba1
use pos/end instead of width()
CyrusNajmabadi May 4, 2015
3b656e8
Deal properly with type parameters not parented by signatures/classes…
CyrusNajmabadi May 5, 2015
b3e75b0
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 8, 2015
ab44f95
Support @type tags referencing JS values.
CyrusNajmabadi May 8, 2015
169e631
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 8, 2015
df73f4f
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 8, 2015
30cf902
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 15, 2015
c3b3d39
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 26, 2015
daeed1b
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 28, 2015
864525a
Merge branch 'master' into jsDocSupport
CyrusNajmabadi May 28, 2015
729c96c
Move code.
CyrusNajmabadi May 28, 2015
0e23b04
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Jun 2, 2015
c0e61b8
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Jun 2, 2015
feec07c
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Jun 3, 2015
d8ef02a
Added non-ts file support to the server
billti Jun 5, 2015
1725e9f
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Jun 30, 2015
34c128e
Added JSX support
billti Jun 30, 2015
74914a5
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Jul 16, 2015
c8d2553
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Jul 21, 2015
6e8a8e6
Merge branch 'master' into jsDocSupport
CyrusNajmabadi Aug 11, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 27 additions & 6 deletions src/compiler/binder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,9 @@ namespace ts {

let symbolCount = 0;
let Symbol = objectAllocator.getSymbolConstructor();
let classifiableNames: Map<string> = {};

let isJavaScriptFile = isJavaScript(file.fileName);
let classifiableNames: Map<string> = {};

if (!file.locals) {
bind(file);
Expand Down Expand Up @@ -166,6 +168,15 @@ namespace ts {
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.ClassDeclaration:
return node.flags & NodeFlags.Default ? "default" : undefined;
case SyntaxKind.JSDocFunctionType:
return isJSDocConstructSignature(node) ? "__new" : "__call";
case SyntaxKind.Parameter:
// Parameters with names are handled at the top of this function. Parameters
// without names can only come from JSDocFunctionTypes.
Debug.assert(node.parent.kind === SyntaxKind.JSDocFunctionType);
let functionType = <JSDocFunctionType>node.parent;
let index = indexOf(functionType.parameters, node);
return "p" + index;
}
}

Expand Down Expand Up @@ -329,6 +340,10 @@ namespace ts {
blockScopeContainer.locals = undefined;
}

if (isJavaScriptFile && node.jsDocComment) {
bind(node.jsDocComment);
}

forEachChild(node, bind);

container = saveContainer;
Expand All @@ -342,8 +357,9 @@ namespace ts {
case SyntaxKind.ClassDeclaration:
case SyntaxKind.InterfaceDeclaration:
case SyntaxKind.EnumDeclaration:
case SyntaxKind.TypeLiteral:
case SyntaxKind.ObjectLiteralExpression:
case SyntaxKind.TypeLiteral:
case SyntaxKind.JSDocRecordType:
return ContainerFlags.IsContainer;

case SyntaxKind.CallSignature:
Expand Down Expand Up @@ -429,6 +445,7 @@ namespace ts {
case SyntaxKind.TypeLiteral:
case SyntaxKind.ObjectLiteralExpression:
case SyntaxKind.InterfaceDeclaration:
case SyntaxKind.JSDocRecordType:
// Interface/Object-types always have their children added to the 'members' of
// their container. They are only accessible through an instance of their
// container, and are never in scope otherwise (even inside the body of the
Expand All @@ -449,6 +466,7 @@ namespace ts {
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.FunctionExpression:
case SyntaxKind.ArrowFunction:
case SyntaxKind.JSDocFunctionType:
case SyntaxKind.TypeAliasDeclaration:
// All the children of these container types are never visible through another
// symbol (i.e. through another symbol's 'exports' or 'members'). Instead,
Expand Down Expand Up @@ -538,7 +556,7 @@ namespace ts {
}
}

function bindFunctionOrConstructorType(node: SignatureDeclaration) {
function bindFunctionOrConstructorTypeORJSDocFunctionType(node: SignatureDeclaration): void {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OR?

// For a given function symbol "<...>(...) => T" we want to generate a symbol identical
// to the one we would get for: { <...>(...): T }
//
Expand Down Expand Up @@ -763,7 +781,7 @@ namespace ts {
return "__" + indexOf((<SignatureDeclaration>node.parent).parameters, node);
}

function bind(node: Node) {
function bind(node: Node): void {
node.parent = parent;

let savedInStrictMode = inStrictMode;
Expand Down Expand Up @@ -861,6 +879,7 @@ namespace ts {
return bindVariableDeclarationOrBindingElement(<VariableDeclaration | BindingElement>node);
case SyntaxKind.PropertyDeclaration:
case SyntaxKind.PropertySignature:
case SyntaxKind.JSDocRecordMember:
return bindPropertyOrMethodOrAccessor(<Declaration>node, SymbolFlags.Property | ((<PropertyDeclaration>node).questionToken ? SymbolFlags.Optional : SymbolFlags.None), SymbolFlags.PropertyExcludes);
case SyntaxKind.PropertyAssignment:
case SyntaxKind.ShorthandPropertyAssignment:
Expand Down Expand Up @@ -890,8 +909,10 @@ namespace ts {
return bindPropertyOrMethodOrAccessor(<Declaration>node, SymbolFlags.SetAccessor, SymbolFlags.SetAccessorExcludes);
case SyntaxKind.FunctionType:
case SyntaxKind.ConstructorType:
return bindFunctionOrConstructorType(<SignatureDeclaration>node);
case SyntaxKind.JSDocFunctionType:
return bindFunctionOrConstructorTypeORJSDocFunctionType(<SignatureDeclaration>node);
case SyntaxKind.TypeLiteral:
case SyntaxKind.JSDocRecordType:
return bindAnonymousDeclaration(<TypeLiteralNode>node, SymbolFlags.TypeLiteral, "__type");
case SyntaxKind.ObjectLiteralExpression:
return bindObjectLiteralExpression(<ObjectLiteralExpression>node);
Expand Down Expand Up @@ -1062,4 +1083,4 @@ namespace ts {
: declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
}
}
}
}
Loading