Skip to content
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

[6.0] Syntactic refactorings "Add documentation" and "Add Codable structs for JSON" #1235

Closed

Conversation

DougGregor
Copy link
Member

Explanation: Introduce more syntactic refactorings "Add documentation" and "Add Codable structs for JSON"
Original PR: #1205, #1206
Risk: Low. Adds a few more syntactic refactorings.
Radar/issue: rdar://127143627
Reviewed by: @ahoppen
Testing: New tests.

DougGregor and others added 8 commits May 7, 2024 08:54
…toringProvider

Rather than only adapt refactoring actions that conform to
SyntaxRefactoringProvider, which takes a syntax node and produces a
syntax node, adapt to the less-constraining EditRefactoringProvider,
which takes a syntax node and produces edits. We can map edits over
just as effectively.

(cherry picked from commit ab32186)
…unction

This code action takes an undocumented function declaration like

    func refactor(syntax: DeclSyntax, in context: Void) -> DeclSyntax?

and adds stub documentation for the parameters / result / etc., like this:

    /// A description
    /// - Parameters:
    ///   - syntax:
    ///   - context:
    ///
    /// - Returns:

(cherry picked from commit b628738)
…duplicating indentation inferring logic

(cherry picked from commit f8d0c60)
Add a syntactic action that takes JSON pasted into a Swift file or
placed in a string literal, then turns it into a set of Codable
structs that can represent the JSON. Our typical example starts like
this:

```
{
    "name": "Produce",
    "shelves": [
        {
            "name": "Discount Produce",
            "product": {
                "name": "Banana",
                "points": 200,
                "description": "A banana that's perfectly ripe."
            }
        }
    ]
}
```

and turns into this:

```swift
struct JSONValue: Codable {
    var name: String
    var shelves: [Shelves]

    struct Shelves: Codable {
        var name: String
        var product: Product

        struct Product: Codable {
            var description: String
            var name: String
            var points: Double
        }
    }
}
```

When converting to JSON, we attempt to reason about multiple JSON
objects on the same level to detect when there are optional fields,
due to either an explicit null or due to the absence of fields in some
of the JSON objects that are conceptually stored together.

The refactoring itself would live down in the swift-syntax package if
not for its dependency on Foundation. We'll move it when appropriate.

(cherry picked from commit e54c99e)
(cherry picked from commit d4bbf9c)
@DougGregor
Copy link
Member Author

@swift-ci please test

@DougGregor DougGregor changed the title [6.0] [6.0] Syntactic refactorings "Add documentation" and "Add Codable structs for JSON" May 7, 2024
@ahoppen
Copy link
Collaborator

ahoppen commented May 7, 2024

I’m cherry-picking PRs from main to release/6.0 as part of #1236, so this shouldn’t be needed.

@ahoppen ahoppen closed this May 7, 2024
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.

None yet

2 participants