-
Notifications
You must be signed in to change notification settings - Fork 380
/
CargoConfigurable.kt
98 lines (82 loc) · 4.09 KB
/
CargoConfigurable.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
* Use of this source code is governed by the MIT license that can be
* found in the LICENSE file.
*/
package org.rust.cargo.project.configurable
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.ComboBox
import com.intellij.ui.EnumComboBoxModel
import com.intellij.ui.components.JBCheckBox
import org.rust.cargo.toolchain.ExternalLinter
import org.rust.cargo.util.CargoCommandLineEditor
import org.rust.ide.ui.layout
import org.rust.openapiext.CheckboxDelegate
import org.rust.openapiext.ComboBoxDelegate
import javax.swing.JComponent
class CargoConfigurable(project: Project) : RsConfigurableBase(project) {
private val autoUpdateEnabledCheckbox: JBCheckBox = JBCheckBox()
private var autoUpdateEnabled: Boolean by CheckboxDelegate(autoUpdateEnabledCheckbox)
private val externalLinterComboBox: ComboBox<ExternalLinter> = ComboBox(EnumComboBoxModel(ExternalLinter::class.java))
private var externalLinter: ExternalLinter by ComboBoxDelegate(externalLinterComboBox)
private val runExternalLinterOnTheFlyCheckbox: JBCheckBox = JBCheckBox()
private var runExternalLinterOnTheFly: Boolean by CheckboxDelegate(runExternalLinterOnTheFlyCheckbox)
private val useOfflineCheckbox: JBCheckBox = JBCheckBox()
private var useOffline: Boolean by CheckboxDelegate(useOfflineCheckbox)
private val compileAllTargetsCheckBox = JBCheckBox()
private var compileAllTargets: Boolean by CheckboxDelegate(compileAllTargetsCheckBox)
private lateinit var externalLinterArguments: CargoCommandLineEditor
override fun getDisplayName(): String = "Cargo"
override fun createComponent(): JComponent = layout {
externalLinterArguments = CargoCommandLineEditor(project, "check ") { null }
row("Watch Cargo.toml:", autoUpdateEnabledCheckbox, """
Update project automatically if `Cargo.toml` changes.
""")
row("Compile all project targets if possible:", compileAllTargetsCheckBox, """
Pass `--target-all` option to cargo build/check command.
""")
row("Offline mode (nightly only):", useOfflineCheckbox, """
Pass `-Z offline` option to cargo not to perform network requests.
Used only for nightly toolchain.
""")
block("External Linter") {
row("External linter:", externalLinterComboBox, """
External tool to use for code analysis.
""")
row("Additional arguments:", externalLinterArguments, """
Additional arguments to pass to `cargo check` or `cargo clippy` command.
""")
row("Run external linter to analyze code on the fly:", runExternalLinterOnTheFlyCheckbox, """
Enable external linter to add code highlighting based on the used linter result.
Can be CPU-consuming.
""")
}
}
override fun isModified(): Boolean =
autoUpdateEnabled != settings.autoUpdateEnabled
|| externalLinter != settings.externalLinter
|| runExternalLinterOnTheFly != settings.runExternalLinterOnTheFly
|| compileAllTargets != settings.compileAllTargets
|| useOffline != settings.useOffline
|| externalLinterArguments.text != settings.externalLinterArguments
override fun apply() {
settings.modify {
it.autoUpdateEnabled = autoUpdateEnabled
it.externalLinter = externalLinter
it.runExternalLinterOnTheFly = runExternalLinterOnTheFly
it.externalLinterArguments = externalLinterArguments.text
it.compileAllTargets = compileAllTargets
it.useOffline = useOffline
}
}
override fun reset() {
autoUpdateEnabled = settings.autoUpdateEnabled
externalLinter = settings.externalLinter
runExternalLinterOnTheFly = settings.runExternalLinterOnTheFly
externalLinterArguments.text = settings.externalLinterArguments
compileAllTargets = settings.compileAllTargets
useOffline = settings.useOffline
}
companion object {
const val DISPLAY_NAME: String = "Cargo"
}
}