@@ -189,6 +189,13 @@ public VirtualFile getClosestIncludingConfigFile(VirtualFile virtualFile) {
189
189
* Gets the closest .graphqlconfig{.yml,.yaml} file even though it doesn't include the specified file.
190
190
*/
191
191
public VirtualFile getClosestConfigFile (VirtualFile virtualFile ) {
192
+ if (virtualFile instanceof LightVirtualFile ) {
193
+ VirtualFile originalFile = ((LightVirtualFile ) virtualFile ).getOriginalFile ();
194
+ if (originalFile != null ) {
195
+ // need a path on disk to find the closest config, so use the original physical file if one has been set
196
+ virtualFile = originalFile ;
197
+ }
198
+ }
192
199
final Set <VirtualFile > contentRoots = getContentRoots (virtualFile );
193
200
VirtualFile directory ;
194
201
if (virtualFile .getFileType () == ScratchFileType .INSTANCE ) {
@@ -702,19 +709,20 @@ public GraphQLNamedScope getSchemaScope(VirtualFile virtualFile) {
702
709
if (virtualFileWithPath .get ().getFileType () != ScratchFileType .INSTANCE ) {
703
710
if (virtualFileWithPath .get () instanceof LightVirtualFile ) {
704
711
// handle entry files
712
+ final LightVirtualFile inMemoryVirtualFile = (LightVirtualFile ) virtualFileWithPath .get ();
705
713
configBaseDir = null ;
706
714
for (Map .Entry <VirtualFile , GraphQLConfigData > entry : configPathToConfigurations .entrySet ()) {
707
715
final GraphQLConfigData configData = entry .getValue ();
708
716
GraphQLFile entryFile = getConfigurationEntryFile (configData );
709
717
boolean found = false ;
710
- if (entryFile .getVirtualFile ().equals (virtualFileWithPath . get () )) {
718
+ if (entryFile .getVirtualFile ().equals (inMemoryVirtualFile )) {
711
719
// the virtual file is an entry file for the specific config base (either the root schema or one of the nested graphql-config project schemas)
712
720
configBaseDir = entry .getKey ();
713
721
found = true ;
714
722
} else if (configData .projects != null ) {
715
723
for (Map .Entry <String , GraphQLResolvedConfigData > projectEntry : configData .projects .entrySet ()) {
716
724
entryFile = getConfigurationEntryFile (projectEntry .getValue ());
717
- if (entryFile .getVirtualFile ().equals (virtualFileWithPath . get () )) {
725
+ if (entryFile .getVirtualFile ().equals (inMemoryVirtualFile )) {
718
726
configBaseDir = entry .getKey ();
719
727
found = true ;
720
728
break ;
@@ -726,10 +734,13 @@ public GraphQLNamedScope getSchemaScope(VirtualFile virtualFile) {
726
734
}
727
735
}
728
736
if (configBaseDir == null ) {
729
- final PsiFile jsonIntrospectionFile = virtualFileWithPath . get () .getUserData (GraphQLSchemaKeys .GRAPHQL_INTROSPECTION_SDL_TO_JSON );
737
+ final PsiFile jsonIntrospectionFile = inMemoryVirtualFile .getUserData (GraphQLSchemaKeys .GRAPHQL_INTROSPECTION_SDL_TO_JSON );
730
738
if (jsonIntrospectionFile != null && jsonIntrospectionFile .getVirtualFile () != null ) {
731
739
// the file is the SDL derived from a JSON introspection file, so use the JSON file directory to find the associated config
732
740
configBaseDir = jsonIntrospectionFile .getVirtualFile ().getParent ();
741
+ } else if (inMemoryVirtualFile .getOriginalFile () != null ) {
742
+ // editing of injected fragments produce in-memory mapped version of the original file, e.g. editing GraphQL inside a JS as it's own editing window
743
+ configBaseDir = inMemoryVirtualFile .getOriginalFile ().getParent ();
733
744
}
734
745
}
735
746
} else {
0 commit comments