Skip to content

Commit 43ba46b

Browse files
authored
Merge pull request #1228 from Stefterv/format-cli
Adding the sketch format command
2 parents c570b6d + 7e109bd commit 43ba46b

File tree

2 files changed

+77
-11
lines changed

2 files changed

+77
-11
lines changed

app/src/processing/app/Processing.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,27 @@ import com.github.ajalt.clikt.parameters.options.flag
1111
import com.github.ajalt.clikt.parameters.options.help
1212
import com.github.ajalt.clikt.parameters.options.option
1313
import processing.app.api.Contributions
14+
import processing.app.api.SketchCommand
1415
import processing.app.api.Sketchbook
1516
import processing.app.ui.Start
1617
import java.io.File
1718
import java.util.prefs.Preferences
1819
import kotlin.concurrent.thread
1920

21+
22+
23+
suspend fun main(args: Array<String>){
24+
Processing()
25+
.subcommands(
26+
LSP(),
27+
LegacyCLI(args),
28+
Contributions(),
29+
Sketchbook(),
30+
SketchCommand()
31+
)
32+
.main(args)
33+
}
34+
2035
class Processing: SuspendingCliktCommand("processing"){
2136
val version by option("-v","--version")
2237
.flag()
@@ -46,16 +61,6 @@ class Processing: SuspendingCliktCommand("processing"){
4661
}
4762
}
4863

49-
suspend fun main(args: Array<String>){
50-
Processing()
51-
.subcommands(
52-
LSP(),
53-
LegacyCLI(args),
54-
Contributions(),
55-
Sketchbook()
56-
)
57-
.main(args)
58-
}
5964

6065
class LSP: SuspendingCliktCommand("lsp"){
6166
override fun help(context: Context) = "Start the Processing Language Server"
@@ -74,7 +79,6 @@ class LSP: SuspendingCliktCommand("lsp"){
7479
}
7580
}
7681

77-
7882
class LegacyCLI(val args: Array<String>): SuspendingCliktCommand("cli") {
7983
override val treatUnknownOptionsAsArgs = true
8084

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package processing.app.api
2+
3+
import com.github.ajalt.clikt.command.SuspendingCliktCommand
4+
import com.github.ajalt.clikt.core.Context
5+
import com.github.ajalt.clikt.core.subcommands
6+
import com.github.ajalt.clikt.parameters.arguments.argument
7+
import com.github.ajalt.clikt.parameters.arguments.help
8+
import com.github.ajalt.clikt.parameters.options.flag
9+
import com.github.ajalt.clikt.parameters.options.help
10+
import com.github.ajalt.clikt.parameters.options.option
11+
import processing.app.Language
12+
import processing.app.Platform
13+
import processing.app.Preferences
14+
import java.io.File
15+
16+
class SketchCommand: SuspendingCliktCommand("sketch"){
17+
override fun help(context: Context) = "Manage a Processing sketch"
18+
override suspend fun run() {
19+
20+
}
21+
init {
22+
subcommands(Format())
23+
}
24+
25+
class Format: SuspendingCliktCommand("format"){
26+
override fun help(context: Context) = "Format a Processing sketch"
27+
val file by argument("file")
28+
.help("Path to the sketch file to format")
29+
val inPlace by option("-i","--inplace")
30+
.flag()
31+
.help("Format the file in place, otherwise prints to stdout")
32+
33+
override suspend fun run(){
34+
try {
35+
Platform.init()
36+
Language.init()
37+
Preferences.init()
38+
39+
// run in headless mode
40+
System.setProperty("java.awt.headless", "true")
41+
42+
val clazz = Class.forName("processing.mode.java.AutoFormat")
43+
// Indirect invocation since app does not depend on java mode
44+
val formatter = clazz
45+
.getDeclaredConstructor()
46+
.newInstance()
47+
48+
val method = clazz.getMethod("format", String::class.java)
49+
val code = File(file).readText()
50+
51+
val formatted = method.invoke(formatter, code) as String
52+
if(inPlace) {
53+
File(file).writeText(formatted)
54+
return
55+
}
56+
println(formatted)
57+
} catch (e: Exception) {
58+
throw InternalError("Failed to invoke main method", e)
59+
}
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)