@@ -189,6 +189,13 @@ public VirtualFile getClosestIncludingConfigFile(VirtualFile virtualFile) {
189189 * Gets the closest .graphqlconfig{.yml,.yaml} file even though it doesn't include the specified file.
190190 */
191191 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+ }
192199 final Set <VirtualFile > contentRoots = getContentRoots (virtualFile );
193200 VirtualFile directory ;
194201 if (virtualFile .getFileType () == ScratchFileType .INSTANCE ) {
@@ -702,19 +709,20 @@ public GraphQLNamedScope getSchemaScope(VirtualFile virtualFile) {
702709 if (virtualFileWithPath .get ().getFileType () != ScratchFileType .INSTANCE ) {
703710 if (virtualFileWithPath .get () instanceof LightVirtualFile ) {
704711 // handle entry files
712+ final LightVirtualFile inMemoryVirtualFile = (LightVirtualFile ) virtualFileWithPath .get ();
705713 configBaseDir = null ;
706714 for (Map .Entry <VirtualFile , GraphQLConfigData > entry : configPathToConfigurations .entrySet ()) {
707715 final GraphQLConfigData configData = entry .getValue ();
708716 GraphQLFile entryFile = getConfigurationEntryFile (configData );
709717 boolean found = false ;
710- if (entryFile .getVirtualFile ().equals (virtualFileWithPath . get () )) {
718+ if (entryFile .getVirtualFile ().equals (inMemoryVirtualFile )) {
711719 // 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)
712720 configBaseDir = entry .getKey ();
713721 found = true ;
714722 } else if (configData .projects != null ) {
715723 for (Map .Entry <String , GraphQLResolvedConfigData > projectEntry : configData .projects .entrySet ()) {
716724 entryFile = getConfigurationEntryFile (projectEntry .getValue ());
717- if (entryFile .getVirtualFile ().equals (virtualFileWithPath . get () )) {
725+ if (entryFile .getVirtualFile ().equals (inMemoryVirtualFile )) {
718726 configBaseDir = entry .getKey ();
719727 found = true ;
720728 break ;
@@ -726,10 +734,13 @@ public GraphQLNamedScope getSchemaScope(VirtualFile virtualFile) {
726734 }
727735 }
728736 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 );
730738 if (jsonIntrospectionFile != null && jsonIntrospectionFile .getVirtualFile () != null ) {
731739 // the file is the SDL derived from a JSON introspection file, so use the JSON file directory to find the associated config
732740 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 ();
733744 }
734745 }
735746 } else {
0 commit comments