Comments (5)
The problem is that the `SyntaxRewriter` visitation exhausts the stack space that dispatch threads get. This can be reproduced from a command-line tool by doing the formatting call on a dispatch queue other than the main one.
To workaround this run the formatting transformation under a pthread thread (which you can customize its stack allocation).
from swift-format.
Reproducer from a command-line tool:
import Foundation
import SwiftFormat
import SwiftFormatConfiguration
import SwiftSyntax
func doit() throws {
let configuration = Configuration()
let formatter = SwiftFormatter(configuration: configuration)
let syntax = try SyntaxParser.parse(URL(fileURLWithPath: "/path/to/swift/file.swift"))
let dummyFileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString + ".swift")
var output = String()
try formatter.format(syntax: syntax, assumingFileURL: dummyFileURL, to: &output)
print(output)
}
let q = DispatchQueue(label: "queue")
q.async {
try! doit()
}
sleep(1)
from swift-format.
Here's how to fix this using `Thread`:
let work = DispatchWorkItem {
doFormatting()
}
let thread = Thread {
work.perform()
}
thread.stackSize = 8 << 20 // 8 MB.
thread.start()
work.wait()
from swift-format.
That did the trick! Thanks so much for the workaround, @akyrtzi - it works really nicely now.
from swift-format.
The root issue of this is being tackled in swiftlang/swift-syntax#147 Once itβs merged, the workaround using Thread
should not be necessary anymore.
from swift-format.
Related Issues (20)
- Add a rule to disallow `public` extensions while allowing `private` and `fileprivate` ones HOT 3
- Missing option to allow trailing whitespaces on blank lines HOT 1
- Whitespace removed on Macro #Preview in SwiftUI HOT 1
- Split comments if they exceed the line limit HOT 2
- Split string literals into multiple lines HOT 2
- Wrapping of long function signatures HOT 4
- `Assertion failed: Too many unresolved delimiter token lengths` for enum cases with associated values when using `prioritizeKeepingFunctionOutputTogether: true` HOT 1
- Is `lineBreakBeforeEachArgument = true` broken? HOT 3
- Incorrect formatting for @_documentation HOT 2
- TrailingComma shows wrong line when AddLines present HOT 1
- `swift-format --recursive` recurses into `.build` HOT 2
- Adjust indentation when using multiple if-let expressions HOT 3
- Formatting results in duplicated top-level documentation HOT 2
- [Question] Can I strict the order of Closure annotation? HOT 1
- [Bugs?] `await` keyword mistake order when I use Swift-testing library. HOT 5
- Function to find and remove ASCII art from block comments is too finicky HOT 4
- Create a rule to add a specific format to file headers HOT 2
- Whitespace linting rules cannot be disabled HOT 1
- Error building swift-format in a Docker container HOT 5
- Typed throws in do blocks formatted incorrectly 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-format.