Skip to content

Commit b064861

Browse files
authored
Always pass path to supergraph.yaml if present, also restart the LSP when it's touched (#6384)
1 parent d63c187 commit b064861

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/lsp/ApolloLspAppService.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import com.intellij.openapi.application.runWriteAction
1212
import com.intellij.openapi.components.Service
1313
import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx
1414
import com.intellij.openapi.project.Project
15+
import com.intellij.openapi.project.guessProjectDir
16+
import com.intellij.openapi.vfs.VirtualFileManager
17+
import com.intellij.openapi.vfs.newvfs.BulkFileListener
18+
import com.intellij.openapi.vfs.newvfs.events.VFileEvent
1519
import com.intellij.util.application
1620

1721
@Service(Service.Level.APP)
@@ -49,6 +53,7 @@ class ApolloLspProjectService(private val project: Project) : Disposable {
4953
init {
5054
logd()
5155
startObserveSettings()
56+
startObserveVfsChanges()
5257
}
5358

5459
private fun startObserveSettings() {
@@ -76,6 +81,22 @@ class ApolloLspProjectService(private val project: Project) : Disposable {
7681
})
7782
}
7883

84+
private fun startObserveVfsChanges() {
85+
project.messageBus.connect(this).subscribe(VirtualFileManager.VFS_CHANGES, object : BulkFileListener {
86+
override fun after(events: MutableList<out VFileEvent>) {
87+
for (event in events) {
88+
val vFile = event.file!!
89+
val isSupergraphYaml = vFile == project.guessProjectDir()?.findChild("supergraph.yaml") ||
90+
vFile.path == project.projectSettingsState.lspPathToSuperGraphYaml
91+
if (isSupergraphYaml) {
92+
logd("supergraph.yaml changed: restarting Apollo LSP")
93+
restartApolloLsp()
94+
}
95+
}
96+
}
97+
})
98+
}
99+
79100
override fun dispose() {
80101
logd()
81102
}

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/rover/RoverHelper.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import com.intellij.execution.configurations.GeneralCommandLine
55
import com.intellij.execution.processTools.getResultStdoutStr
66
import com.intellij.execution.processTools.mapFlat
77
import com.intellij.openapi.project.Project
8+
import com.intellij.openapi.project.guessProjectDir
89
import kotlinx.coroutines.runBlocking
10+
import java.io.File
911

1012
object RoverHelper {
1113
private fun getRoverBinDirectory() = "${System.getProperty("user.home")}/.rover/bin"
@@ -20,9 +22,18 @@ object RoverHelper {
2022
setWorkDirectory(getRoverBinDirectory())
2123
getEnvironment().put("RUST_BACKTRACE", "full")
2224
addParameter("lsp")
23-
if (project.projectSettingsState.lspPassPathToSuperGraphYaml && project.projectSettingsState.lspPathToSuperGraphYaml.isNotBlank()) {
25+
if (project.projectSettingsState.lspPassPathToSuperGraphYaml &&
26+
project.projectSettingsState.lspPathToSuperGraphYaml.isNotBlank() &&
27+
File(project.projectSettingsState.lspPathToSuperGraphYaml).exists()
28+
) {
2429
addParameter("--supergraph-config")
2530
addParameter(project.projectSettingsState.lspPathToSuperGraphYaml)
31+
} else {
32+
val superGraphYamlFilePath = project.guessProjectDir()?.findChild("supergraph.yaml")?.path
33+
if (superGraphYamlFilePath != null) {
34+
addParameter("--supergraph-config")
35+
addParameter(superGraphYamlFilePath)
36+
}
2637
}
2738
if (project.projectSettingsState.lspPassAdditionalArguments && project.projectSettingsState.lspAdditionalArguments.isNotBlank()) {
2839
addParameters(project.projectSettingsState.lspAdditionalArguments.split(' '))

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/settings/ProjectSettingsService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ class ProjectSettingsService(private val project: Project) : PersistentStateComp
132132
val superGraphYamlFilePath = project.guessProjectDir()?.findChild("supergraph.yaml")?.path
133133
if (superGraphYamlFilePath != null) {
134134
lspPathToSuperGraphYaml = superGraphYamlFilePath
135+
lspPassPathToSuperGraphYaml = true
135136
} else {
136137
lspPassPathToSuperGraphYaml = false
137138
}

0 commit comments

Comments
 (0)