Comments (8)
from swift-syntax.
Seems good idea to me. The benefit is you will be able to structurally distinguish what kind of quotes (multiline or single) were used, instead of searching the string literal text string in order to distinguish.
If we do this we should probably get rid of 'string_literal' token kind and use 'string_segment' token kind for the non-interpolation case as well.
from swift-syntax.
Comment by Yusuke Kita (JIRA)
Exactly.
Can I implement this fix? Seems quite interesting to dive into more details.
from swift-syntax.
Sure! Note that after changing the syntax definition file it would need a change on the C++ parser side.
from swift-syntax.
Comment by Yusuke Kita (JIRA)
I have a question about literal expression for this. I'm looking into Parser and wondering whether I should extend 'StringLiteralExpr' or create new one like 'NonInterpolatedStringLiteralExpr'. Which one do you think is better? @akyrtzi
I figured out how 'string_segment' is parsed in 'parseExprStringLiteral' func, but I haven't had conclusion for the interface yet.
from swift-syntax.
I think we should generalize StringLiteralExpr
.
Basically, syntax change would be:
-
Remove
StringLiteralExpr
-
Rename
StringInterpolationExpr
toStringLiteralExpr
-
Rename
StringInterpolationSegments
toStringLiteralSegment
like:
Node('StringLiteralExpr', kind='Expr',
children=[
Child('OpenQuote', kind='Token',
token_choices=[
'StringQuoteToken',
'MultilineStringQuoteToken',
]),
Child('Segments', kind='StringLiteralSegments'),
Child('CloseQuote', kind='Token',
token_choices=[
'StringQuoteToken',
'MultilineStringQuoteToken',
]),
]),
We can easily check whether it's interpolated or not by (segments.count == 1 && segments[0] is StringSegmentToken)
from swift-syntax.
I'm not a big fan of adding `NonInterpolatedStringLiteralExpr` either. The reason is users are likely to have two overrides for either visit or rewrite functions to handle all string literal cases. We should strive to help users reduce code duplication. However, feel free to add a convenient function to `StringLIteralExpr` indicating whether there are interpolations in the node.
from swift-syntax.
Comment by Yusuke Kita (JIRA)
What Rintaro suggested makes sense to me. I'll go with `StringLiteralExpr` for the case. Thanks for your feedbacks!
from swift-syntax.
Related Issues (20)
- Improperly escaped backslash in fix-it message HOT 1
- New 600.0.0 prerelease HOT 4
- FixItApplier crash when generating diagnostics for whole tree but applying them to a subtree HOT 11
- Further generalize parse diagnostics functions HOT 1
- Body Macro formatted despite formatMode disabled HOT 2
- Improve diagnostics for C-style parameter declaration with structural type HOT 1
- [Parser] Misparsed function parameter with keyword argument '_const' HOT 1
- `600.0.0-prerelease-2024-07-24` fails to build on macOS 12 with Swift 5.10 HOT 12
- swift-syntax doesn't give negative integer literals special treatment while the Swift compiler does. HOT 2
- Source location retrieving doesn't work in body macro expansion assertion HOT 1
- KeyPath `.self` cannot be resolved in earlier Swift versions HOT 1
- Detect recursive attached macro expansion HOT 1
- Macro protocols lack `async` from `expansion` function requirements despite proposals stating they should have it HOT 17
- DeclModifierListSyntax adds redundant space after private modifier HOT 2
- Multiple SPM frameworks with macros fail Xcode app project build HOT 2
- swift format fails when using new `sending` keyword HOT 4
- [Swift 6.0] Xcode Beta 16 build failure HOT 10
- Invalid semantic versioning? HOT 2
- Compiler crash while emitting witness table for protocol conformance
- [Diagnostics] Intra-group trivia not preserved when moving a node group HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swift-syntax.