Comments (2)
@bddckr I don't think #314 indicates that ktfmt used to support context receivers.
Rather, any situations in which they work right now are incidental. In that issue, they're parsed but not formatted correctly.
In your example, they're not parsed at all.
Normally I'd close this as a duplicate, but the fact that this causes a crash (instead of just bad formatting) means we should consider a mitigation at least (if a full fix is hard).
@strulovich has there been any investigation into this?
from ktfmt.
Adding this to TokenizerTest
shows the issue:
@Test
fun `Context receivers are parsed correctly`() {
val code = """
|class A {
| context(String)
| fun test() {}
|}
|""".trimMargin().trimMargin()
val file = Parser.parse(code)
val tokenizer = Tokenizer(code, file)
file.accept(tokenizer)
assertThat(tokenizer.toks.map { it.originalText })
.containsExactly("class", " ", "A", " ", "{", "\n", " ", "context", "(", "String", ")", "\n", " ", "fun", " ", "test", "(", ")", " ", "{", "}", "\n", "}")
.inOrder()
assertThat(tokenizer.toks.map { it.index })
.containsExactly(0, -1, 1, -1, 2, -1, -1, 3, 4, 5, 6, -1, -1, 7, -1, 8, 9, 10, -1, 11, 12, -1, 13)
.inOrder()
}
Changing pom.xml
to use <kotlin.version>1.6.20-M1</kotlin.version>
makes that test pass.
However, this is where my knowledge ends 😅 Adding this to FormatterTest
shows that further changes are required to support context receivers, just like #314 explains.
@Test
fun `context receivers`() =
assertFormatted(
"""
|class A {
| context(String)
| fun test() {}
|}
|"""
.trimMargin())
from ktfmt.
Related Issues (20)
- @sample tags should not be moved within kdoc HOT 9
- Formatting creating lines longer than 100 characters HOT 5
- Unexpected removal of space after a comment HOT 2
- Annotation location on properties HOT 1
- Incorrect detection of unused import in Gradle Kotlin DSLs using new assignment operator HOT 1
- Update the pics in [demo](https://github.com/facebook/ktfmt#demo) HOT 4
- Publishing workflow is broken HOT 2
- ktfmt 0.45 is shipping against ancient milestone version of Kotlin HOT 2
- Parse error on empty enum with ';'
- Stop unwrapping wrapped function chaining HOT 1
- Kotlin rangeUntil ..< Syntax Throws Error HOT 1
- Cannot handle formatting `context` keyword HOT 3
- idea complains about deprecated method HOT 5
- KDoc: `@param` and `@property` sorted by type, not by position
- Continuation indent on delegating properties is missing HOT 1
- 0.47 trailing comma changes cause class definitions to be formatted weirdly HOT 2
- Formatting isn't idempotent, and repeated invocations produce bad comment formatting HOT 8
- ktfmt version 0.47 incompatible with spotless HOT 2
- Feature request: GraalVM artifacts HOT 1
- add trailing comma support to other non-google styles HOT 4
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 ktfmt.