Hi all,

I've now merged this to master. Just want to say I appreciate the enthusiasm - 
I'm really excited about all of the things this work will enable.

You can track progress in the following places:

https://github.com/apple/swift/tree/master/lib/Syntax/README.md
For an overview of the APIs, implementation, and testing information.

https://github.com/apple/swift/tree/master/lib/Syntax/Status.md
For implementation status and referenced SRs.

https://bugs.swift.org/browse/SR-3968?filter=10739
I'll be using the 'Syntax', 'Format', and 'Migrator' labels to track tasks and 
bugs. I'll be working quickly but I'll try to peel off some starter bugs and 
give a shout out when I can.

Stay Swifty-
DF

> On Feb 10, 2017, at 2:16 PM, David Farler via swift-dev <swift-dev@swift.org> 
> wrote:
> 
> Good day swift-dev!
> 
> A truly modern compiler has to have excellent IDE and tools integration, as 
> we have done through the SourceKit layer, providing code completion, 
> documentation comments, syntax highlighting, and more. There's no reason to 
> stop there, so I'd like to announce work on the Swift Syntax and Structured 
> Editing library, which will be growing in lib/Syntax in the coming weeks. The 
> overall goal of the library is to provide a representation and a body of APIs 
> for structured editing on Swift syntax.
> 
> The immediate goals of the library are to provide infrastructure for the 
> Swift Migrator and for a first-class formatting tool, which we'll be bringing 
> to the open source tree and developing publicly.
> 
> Eventually, I also want to use this as the main representation for syntax, 
> which will allow us to incrementally re-parse after edits. This will improve 
> responsiveness in editors when working on large files, which can have linear 
> performance due to re-parsing and re-type-checking. The current AST doesn't 
> make a clear distinction between syntactic and semantic information–by 
> separating these concerns, we have a better hope of incrementally/lazily 
> type-checking only the parts of a syntax tree necessary after edits.
> 
> Some key attributes of new Syntax nodes to note. In summary, they:
> 
>       • back all of the purely syntactic information for a piece of source
>       • are free of semantic information
>       • have "full fidelity" access to all of the "trivia", like whitespace 
> and comments
>       • are immutable, thread-safe, and can share substructure
>       • have straightforward structured editing APIs
> 
> Syntax transformation passes can be combined to form a pipeline. This 
> foundation has served us well in the Migrator–composition makes it easy to 
> build up complex batch operations but it also makes it easier to reason 
> about, test, and maintain smaller transformations as well. We consider this 
> superior to Clang migrators, where textual edits are based on buffer ranges. 
> These do not compose well: the way to pipeline transformation passes there is 
> to rebuild a new AST from scratch.
> 
> The properties of the Syntax tree, the information that it captures, make it 
> a good match to be used for other functionality like indentation and code 
> formatting.
> 
> In order to minimize disruption to the compiler pipeline in the short term, 
> we would like to propose making this Syntax tree outside of the normal 
> compile workflow, on demand, which will gather the source trivia as it does 
> so. This is similar to how the migrator works today. As it develops further, 
> it will be integrated into other areas.
> 
> 
> Structured Editing APIs
> 
> So, what do we mean by "structured editing"? Here are a few examples:
> 
>       • Add an argument label to a function declaration
>       • Change a global function call to a method call based on import 
> attributes, such as we did for CoreGraphics "import-as-member"
>       • Change a generic parameter name in a generic struct declaration
>       • Add a requirement to a generic where clause
>       • Indent or reformat any syntax according to declarative formatting 
> rules
> 
> These kinds of diverse operations are critical to the Migrator, which needs 
> to be able to accurately make changes at all granularities of the Syntax tree.
> 
> There are a few major use patterns that will come up first:
> 
>       • Creating new Syntax nodes and tokens. These will be exposed in a 
> single place, the SyntaxBuilder, for better discoverability and code 
> completion.
>       • Building up Syntax nodes in a single call. I call these "Make APIs".
>       • Building up Syntax nodes gradually as it appears, finalizing the 
> process at any point, marking expected syntax as 'missing'. The parser is a 
> typical manifestation of this use case. I call these "Builder APIs".
>       • Modifying Syntax nodes. Effectively setters but, since Syntax nodes 
> are immutable, these are called "With APIs".
> 
> Higher level APIs and syntax rewriter abstractions will be built on top of 
> these as more of the grammar is built up in the library.
> 
> There is a pull request with a prototype of the current iteration of the 
> APIs. This is still a work in progress and will likely be molten for a few 
> weeks.
> 
> https://github.com/apple/swift/pull/7393
> 
> Looking forward to your comments and suggestions!
> 
> Regards,
> David
> 
> _______________________________________________
> swift-dev mailing list
> swift-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to