Skip to content

Symbol graph support #28678

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

Merged
merged 1 commit into from
Jan 10, 2020
Merged

Symbol graph support #28678

merged 1 commit into from
Jan 10, 2020

Conversation

bitjammer
Copy link
Contributor

Adds a tool swift-symbolgraph-extract that reads an existing Swift
module and prints a platform- and language-agnostic JSON description of
the module, primarly for documentation.

Adds a small sub-library SymbolGraphGen which houses the core
implementation for collecting relevant information about declarations.
The main entry point is integrated directly into the driver as a mode:
the tool is meant to be run outside of the normal edit-compile-run/test
workflow to avoid impacting build times.

Along with common options for other tools, unique options include
pretty-print for debugging, and a minimum-access-level options for
including internal documentation.

A symbol graph is a directed graph where the nodes are symbols in a
module and the edges are relationships between them. For example, a
struct S may have a member var x. The graph would have two nodes for
S and x, and one "member-of" relationship edge. Other relationship
kinds include "inherits-from" or "conforms to". The data format for a
symbol graph is still under development and may change without notice
until a specificiation and versioning scheme is published.

Various aspects about a symbol are recorded in the nodes, such as
availability, documentation comments, or data needed for printing the
shapes of declarations without having to understand specifics about the
langauge.

Implicit and public-underscored stdlib declarations are not included by
default.

rdar://problem/55346798

@bitjammer bitjammer requested a review from akyrtzi December 10, 2019 18:32
@bitjammer
Copy link
Contributor Author

@akyrtzi Can you add anyone else that you'd like to take a look?

@jackhl jackhl self-requested a review December 10, 2019 18:37
Copy link

@jackhl jackhl left a comment

Choose a reason for hiding this comment

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

LGTM!

@akyrtzi akyrtzi requested a review from nkcsgexi December 10, 2019 19:46
@akyrtzi
Copy link
Contributor

akyrtzi commented Dec 10, 2019

@nkcsgexi this involves reading information from a Swift module, could you take a look?

@swiftlang swiftlang deleted a comment from swift-ci Jan 7, 2020
@swiftlang swiftlang deleted a comment from swift-ci Jan 7, 2020
Adds a tool `swift-symbolgraph-extract` that reads an existing Swift
module and prints a platform- and language-agnostic JSON description of
the module, primarly for documentation.

Adds a small sub-library `SymbolGraphGen` which houses the core
implementation for collecting relevant information about declarations.
The main entry point is integrated directly into the driver as a mode:
the tool is meant to be run outside of the normal edit-compile-run/test
workflow to avoid impacting build times.

Along with common options for other tools, unique options include
`pretty-print` for debugging, and a `minimum-access-level` options for
including internal documentation.

A symbol graph is a directed graph where the nodes are symbols in a
module and the edges are relationships between them. For example, a
`struct S` may have a member `var x`. The graph would have two nodes for
`S` and `x`, and one "member-of" relationship edge. Other relationship
kinds include "inherits-from" or "conforms to". The data format for a
symbol graph is still under development and may change without notice
until a specificiation and versioning scheme is published.

Various aspects about a symbol are recorded in the nodes, such as
availability, documentation comments, or data needed for printing the
shapes of declarations without having to understand specifics about the
langauge.

Implicit and public-underscored stdlib declarations are not included by
default.

rdar://problem/55346798
@bitjammer
Copy link
Contributor Author

@swift-ci Please smoke test

@bitjammer
Copy link
Contributor Author

@swift-ci Please test

@swift-ci
Copy link
Contributor

Build failed
Swift Test OS X Platform
Git Sha - 31a9e146773b7cbd7dd97f6487611fb5cda7571f

@swift-ci
Copy link
Contributor

Build failed
Swift Test Linux Platform
Git Sha - 31a9e146773b7cbd7dd97f6487611fb5cda7571f

@bitjammer
Copy link
Contributor Author

Per e-mail, we'll do post-commit review on this and refine it as needed. This uses its own driver mode so will not affect any other workflows in the compiler.

@bitjammer bitjammer merged commit f34c970 into swiftlang:master Jan 10, 2020
@bitjammer bitjammer deleted the acgarland/symbol-graph branch January 10, 2020 22:53
@compnerd
Copy link
Member

This broke the windows builders: https://ci-external.swift.org/job/oss-swift-windows-x86_64/2422/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants