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

Errors with valid syntax #28

Open
kuglee opened this issue Feb 27, 2024 · 7 comments
Open

Errors with valid syntax #28

kuglee opened this issue Feb 27, 2024 · 7 comments

Comments

@kuglee
Copy link

kuglee commented Feb 27, 2024

Thanks for developing this.
I've tried it with one of my projects: SwiftFormatter. Unfortunately I've got some phantom errors reported in the following files (I'm using Xcode Version 15.2 (15C500b)):

  • Sources/AppExtension/AppExtension.swift
    • line 76: ',', ';', <extension member>, '=', '?', '{' or '}' expected, got '.'
    • line 83: '#if', ';', <infix expression>, <statement>, IDENTIFIER or KEYWORD_CONTEXT_SENSITIVE expected, got '}'
  • Sources/FormatterSettings/FormatterSettings.swift
    • line 404: ',', ':', <struct member>, '=' or '}' expected, got ':'
  • Sources/SettingsFeature/SettingsFeature.swift
    • line 244: ')', ',', '.', '...', <, '=' or '?' expected, got ','
  • Sources/StyleGuide/Buttons.swift
    • line 6: ')', ',', '...', '=', '?' or async expected, got '.'
    • line 6: '!', '#if', '(', '.', ';', <infix expression>, <statement>, '?' or '{' expected, got ')'
  • Sources/StyleGuide/Colors.swift
    • line 10: IDENTIFIER or KEYWORD_CONTEXT_SENSITIVE expected, got 'Self'
  • Sources/WelcomeFeature/EqualIconWidthDomain.swift
    • line 10: ',', '.', ':', < or where expected, got '='
    • line 12: ',', '.', ':', < or where expected, got '='
    • line 52: ')' expected, got '@'
@jansorg
Copy link
Owner

jansorg commented Feb 27, 2024

Thanks for the pointers!
These are most likely parser errors in this plugin, Swift isn't the easiest language for parsing ;)

This project is a little quiet at the moment, I'll be able to commit time for it in about 4-6 weeks.

@kuglee
Copy link
Author

kuglee commented Feb 27, 2024

No rush 🙂. Keep up the good work.

@eirikvaa
Copy link

First of all, amazing work! Especially when working in a Kotlin Multipaltform application, having some Swift support is great!

I came across some syntax that was not supported, so just dropping it here for reference:

let task = Task { @MainActor in
               ^ 
    // ...
}

where the error message says:

'#', '#if', '#keypath', '&', '(', '.', ';', <, , , , , , , , , , , , , Any, Self, '', _, await, defer, do, self, super, try, '{' or '}' expected, got '{'

If I remove the @MainActor, the error goes away.

@jansorg
Copy link
Owner

jansorg commented Apr 19, 2024

@kuglee I've fixed all your reported problems for the next update.

@eirikvaa Could you provide a working example for the problem, please? If that's a closure expression, then the official Swift grammar doesn't support this, "Grammar of a closure expression" of https://docs.swift.org/swift-book/documentation/the-swift-programming-language/summaryofthegrammar#Declarations
A working example would help to fix it and to report it as change to the maintainers of the Grammar.

@kuglee
Copy link
Author

kuglee commented Apr 19, 2024

I can look at it next week, but the project I linked is a good example.

@jansorg
Copy link
Owner

jansorg commented Apr 19, 2024

@kuglee All your reported problems are fixed for the next update. The other question was about the appended problem by @eirikvaa .

@eirikvaa
Copy link

@jansorg By looking at the Swift grammar, I think we can get to the syntax with the following rules and substitutions:

closure-expression → { attributes? closure-signature? statements? }
attributes → attribute attributes?
attribute → @ attribute-name attribute-argument-clause?
attribute-name → identifier

And then we are pretty much at Task { @MainActor }. A working example would be something like this:

func foo() {
    Task { @MainActor in 
        print("I'm running on the main actor")
    }
}

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

No branches or pull requests

3 participants