@Override
    public void visitPyFile(@NotNull PyFile node) {
      Module module = guessModule(node);
      if (module == null || isFileIgnored(node)) return;
      final Sdk sdk = PythonSdkUtil.findPythonSdk(module);

      final boolean pyCharm = PythonIdeLanguageCustomization.isMainlyPythonIde();

      final List<LocalQuickFix> fixes = new ArrayList<>();
      if (sdk == null) {
        final @InspectionMessage String message;
        if (pyCharm) {
          message = PyPsiBundle.message("INSP.interpreter.no.python.interpreter.configured.for.project");
        }
        else {
          message = PyPsiBundle.message("INSP.interpreter.no.python.interpreter.configured.for.module");
        }
        registerProblemWithCommonFixes(node, message, module, null, fixes, pyCharm);
      }
      else {
        final @NlsSafe String associatedModulePath = PySdkExtKt.getAssociatedModulePath(sdk);
        if (associatedModulePath == null || PySdkExtKt.isAssociatedWithAnotherModule(sdk, module)) {
          final PyInterpreterInspectionQuickFixData fixData = PySdkProvider.EP_NAME.getExtensionList().stream()
            .map(ext -> ext.createEnvironmentAssociationFix(module, sdk, pyCharm, associatedModulePath))
            .filter(it -> it != null)
            .findFirst()
            .orElse(null);

          if (fixData != null) {
            fixes.add(fixData.getQuickFix());
            // noinspection HardCodedStringLiteral
            registerProblemWithCommonFixes(node, fixData.getMessage(), module, sdk, fixes, pyCharm);
            return;
          }
        }

        if (! PySdkExtKt.getSdkSeemsValid(sdk)) {
          final @InspectionMessage String message;
          if (pyCharm) {
            message = PyPsiBundle.message("INSP.interpreter.invalid.python.interpreter.selected.for.project");
          }
          else {
            message = PyPsiBundle.message("INSP.interpreter.invalid.python.interpreter.selected.for.module");
          }
          registerProblemWithCommonFixes(node, message, module, sdk, fixes, pyCharm);
        }
        else {
          final LanguageLevel languageLevel = PythonSdkType.getLanguageLevelForSdk(sdk);
          if (!LanguageLevel.SUPPORTED_LEVELS.contains(languageLevel)) {
            final @InspectionMessage String message;
            if (pyCharm) {
              message = PyPsiBundle.message("INSP.interpreter.python.has.reached.its.end.of.life.and.is.no.longer.supported.in.pycharm",
                                         languageLevel);
            }
            else {
              message = PyPsiBundle.message("INSP.interpreter.python.has.reached.its.end.life.and.is.no.longer.supported.in.python.plugin",
                                         languageLevel);
            }
            registerProblemWithCommonFixes(node, message, module, sdk, fixes, pyCharm);
          }
        }
      }
    }
@Override
    public void visitPyFile(@NotNull PyFile node)