in ReSharper.FSharp/src/FSharp/FSharp.Psi/src/Features/Daemon/Stages/FSharpDaemonStageBase.cs [13:38]
public abstract class FSharpDaemonStageBase(bool visibleDocumentsOnly = false, bool enableInSignatures = true) : IDaemonStage
{
protected virtual bool IsSupported(IPsiSourceFile sourceFile, DaemonProcessKind processKind) =>
(!visibleDocumentsOnly || processKind == DaemonProcessKind.VISIBLE_DOCUMENT) &&
sourceFile != null && sourceFile.IsValid() &&
sourceFile.Properties is { IsNonUserFile: false, ProvidesCodeModel: true } &&
sourceFile.LanguageType.Is<FSharpProjectFileType>() &&
(enableInSignatures || !sourceFile.LanguageType.Is<FSharpSignatureProjectFileType>());
public IEnumerable<IDaemonStageProcess> CreateProcess(IDaemonProcess daemonProcess,
IContextBoundSettingsStore settings, DaemonProcessKind processKind)
{
if (!IsSupported(daemonProcess.SourceFile, processKind))
return EmptyList<IDaemonStageProcess>.InstanceList;
if (daemonProcess.SourceFile.GetPrimaryPsiFile() is not IFSharpFile fsFile)
return EmptyList<IDaemonStageProcess>.Instance;
var process = CreateStageProcess(fsFile, settings, daemonProcess, processKind);
return process != null ? [process] : EmptyList<IDaemonStageProcess>.InstanceList;
}
[CanBeNull]
protected abstract IDaemonStageProcess CreateStageProcess([NotNull] IFSharpFile fsFile,
IContextBoundSettingsStore settings, [NotNull] IDaemonProcess process, DaemonProcessKind processKind);
}