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

Xcode 15: Unknown symbol kind swift.extension #1368

Closed
esteluk opened this issue Oct 2, 2023 · 4 comments
Closed

Xcode 15: Unknown symbol kind swift.extension #1368

esteluk opened this issue Oct 2, 2023 · 4 comments

Comments

@esteluk
Copy link
Contributor

esteluk commented Oct 2, 2023

With some code that offers an extension to a public (Foundation?) class, such as this:

public etension Bundle {
  static var myBundle: Bundle? {
    // ...
    return nil
  }
}

The following gets generated as in my symbol graph build/symbolgraph/target/[email protected]:

{
    "kind": {
        "identifier": "swift.extension",
        "displayName": "Extension"
    },
    "identifier": {
        "precise": "s:e:s:So8NSBundleC29TargetE04selfD0ABSgvpZ",
        "interfaceLanguage": "swift"
    },
    "pathComponents": [
        "Bundle"
    ],
    "names": {
        "title": "Bundle",
        "navigator": [
            {
                "kind": "identifier",
                "spelling": "Bundle"
            }
        ],
        "subHeading": [
            {
                "kind": "keyword",
                "spelling": "extension"
            },
            {
                "kind": "text",
                "spelling": " "
            },
            {
                "kind": "typeIdentifier",
                "spelling": "Bundle",
                "preciseIdentifier": "c:objc(cs)NSBundle"
            }
        ]
    },
    "swiftExtension": {
        "extendedModule": "Foundation",
        "typeKind": "swift.class"
    },
    "declarationFragments": [
        {
            "kind": "keyword",
            "spelling": "extension"
        },
        {
            "kind": "text",
            "spelling": " "
        },
        {
            "kind": "typeIdentifier",
            "spelling": "Bundle",
            "preciseIdentifier": "c:objc(cs)NSBundle"
        }
    ],
    "accessLevel": "public",
    "location": {
        "uri": "...",
        "position": {
            "line": 6,
            "character": 7
        }
    }
}

Then when I run Jazzy with the config:

swift_build_tool: symbolgraph
symbolgraph_directory: build/symbol-graph/target/

The following error occurs:

/Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/fastlane-2.213.0/fastlane_core/lib/fastlane_core/ui/interface.rb:153:in `shell_error!': [!] Exit status of command 'jazzy' was 1 instead of 0. (FastlaneCore::Interface::FastlaneShellError)
/Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph/symbol.rb:120:in `init_kind': Unknown symbol kind 'swift.extension' (RuntimeError)
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph/symbol.rb:29:in `initialize'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph/graph.rb:22:in `new'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph/graph.rb:22:in `block in initialize'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph/graph.rb:21:in `each'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph/graph.rb:21:in `initialize'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph.rb:78:in `new'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph.rb:78:in `block in parse_symbols'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph.rb:71:in `map'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph.rb:71:in `parse_symbols'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/symbol_graph.rb:34:in `build'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/lib/jazzy/doc_builder.rb:78:in `build'
	from /Users/nathanw/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/jazzy-0.14.4/bin/jazzy:16:in `<top (required)>'
	from /Users/nathanw/.rbenv/versions/3.2.2/bin/jazzy:25:in `load'
	from /Users/nathanw/.rbenv/versions/3.2.2/bin/jazzy:25:in `<main>'
Using config file .jazzy.yaml

Tested with Jazzy 0.14.4.
Before moving to Xcode 15, the same code was compiling as expected, so I guess the symbol kind may have changed between releases. Will try to check the symbol kind in Xcode 14 when I get a chance.

@esteluk
Copy link
Contributor Author

esteluk commented Oct 2, 2023

The Xcode 14 output is very different:

{
    "kind": {
        "identifier": "swift.type.property",
        "displayName": "Type Property"
    },
    "identifier": {
        "precise": "s:So8NSBundleC29TargetE04selfD0ABSgvpZ",
        "interfaceLanguage": "swift"
    },
    "pathComponents": [
        "Bundle",
        "myBundle"
    ],
    "names": {
        "title": "myBundle",
        "subHeading": [
            {
                "kind": "keyword",
                "spelling": "static"
            },
            {
                "kind": "text",
                "spelling": " "
            },
            {
                "kind": "keyword",
                "spelling": "var"
            },
            {
                "kind": "text",
                "spelling": " "
            },
            {
                "kind": "identifier",
                "spelling": "myBundle"
            },
            {
                "kind": "text",
                "spelling": ": "
            },
            {
                "kind": "typeIdentifier",
                "spelling": "Bundle",
                "preciseIdentifier": "c:objc(cs)NSBundle"
            },
            {
                "kind": "text",
                "spelling": "?"
            }
        ]
    },
    "docComment": {
        "uri": "...",
        "module": "Target",
        "lines": [
            {
                "range": {
                    "start": {
                        "line": 7,
                        "character": 8
                    },
                    "end": {
                        "line": 7,
                        "character": 38
                    }
                },
                "text": "My comment"
            }
        ]
    },
    "swiftExtension": {
        "extendedModule": "Foundation",
        "typeKind": "swift.class"
    },
    "declarationFragments": [
        {
            "kind": "keyword",
            "spelling": "static"
        },
        {
            "kind": "text",
            "spelling": " "
        },
        {
            "kind": "keyword",
            "spelling": "var"
        },
        {
            "kind": "text",
            "spelling": " "
        },
        {
            "kind": "identifier",
            "spelling": "myBundle"
        },
        {
            "kind": "text",
            "spelling": ": "
        },
        {
            "kind": "typeIdentifier",
            "spelling": "Bundle",
            "preciseIdentifier": "c:objc(cs)NSBundle"
        },
        {
            "kind": "text",
            "spelling": "? { "
        },
        {
            "kind": "keyword",
            "spelling": "get"
        },
        {
            "kind": "text",
            "spelling": " }"
        }
    ],
    "accessLevel": "public",
    "location": {
        "uri": "...",
        "position": {
            "line": 8,
            "character": 15
        }
    }
}

From searching I saw https://forums.swift.org/t/symbol-graph-adaptions-for-documenting-extensions-to-external-types-in-docc/56684/2 on which @johnfairh replied last year, which probably has all the context for this change.

@johnfairh
Copy link
Collaborator

Oh right - I had thought we could ignore this stuff because it's opt-in (-emit-extension-block-symbols), didn't think about users supplying opted-in symbolgraph files. Will take a look. Thanks for reporting it.

@esteluk
Copy link
Contributor Author

esteluk commented Oct 4, 2023

It looks like the default behaviour of Swift 5.9 didn't change: I guess Xcode 15 might be opting in to emit-extension-block-symbols now

@johnfairh
Copy link
Collaborator

johnfairh commented Oct 19, 2023

Fixed in master via #1372.

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

No branches or pull requests

2 participants