Esempio n. 1
0
        /// <summary>
        /// Implementation of the world of effectful computations. It respects the threading model of WPF.
        /// </summary>
        /// <param name="effect">
        /// The effectful computation to be performed.
        /// </param>
        /// <param name="messageDestination">
        /// A function which accepts the message produced by <paramref name="effect"/>, when it completes.
        /// </param>
        private static async void ExecuteEffect(FSharpAsync <Message> effect, Action <Message> messageDestination)
        {
            var m = await FSharpAsync.StartAsTask(
                effect,
                FSharpOption <TaskCreationOptions> .None,
                FSharpOption <CancellationToken> .None);

            messageDestination(m);
        }
Esempio n. 2
0
        static async Task <Gateway> Connect(string appName, ConnectionMode mode, Discovery discovery, TimeSpan operationTimeout,
                                            int maxRetryForThrottling, TimeSpan maxRetryWait)
        {
            var log  = Log.ForContext <CosmosContext>();
            var c    = new Connector(operationTimeout, maxRetryForThrottling, maxRetryWait, log, mode: mode);
            var conn = await FSharpAsync.StartAsTask(c.Connect(appName, discovery), null, null);

            return(new Gateway(conn, new BatchingPolicy(defaultMaxItems: 500)));
        }
Esempio n. 3
0
        static async Task <Equinox.EventStore.EventStoreContext> Connect(EventStoreConfig config)
        {
            var c = new Connector(config.Username, config.Password, reqTimeout: TimeSpan.FromSeconds(5), reqRetries: 1);

            var conn = await FSharpAsync.StartAsTask(
                c.Establish("Twin", Discovery.NewGossipDns(config.Host), ConnectionStrategy.ClusterTwinPreferSlaveReads),
                null, null);

            return(new Equinox.EventStore.EventStoreContext(conn, new BatchingPolicy(maxBatchSize: 500)));
        }
Esempio n. 4
0
        static async Task <GesGateway> Connect(EventStoreConfig config)
        {
            var log = Logger.NewSerilogNormal(Serilog.Log.ForContext <EventStoreContext>());
            var c   = new GesConnector(config.Username, config.Password, reqTimeout: TimeSpan.FromSeconds(5), reqRetries: 1);

            var conn = await FSharpAsync.StartAsTask(
                c.Establish("Twin", Discovery.NewGossipDns(config.Host), ConnectionStrategy.ClusterTwinPreferSlaveReads),
                null, null);

            return(new GesGateway(conn, new GesBatchingPolicy(maxBatchSize: 500)));
        }
Esempio n. 5
0
        /// Run the decision method, letting it decide whether or not the Command's intent should manifest as Events
        public async Task <Unit> Execute(Func <TState, IEnumerable <TEvent> > interpret)
        {
            FSharpList <TEvent> decide_(TState state)
            {
                var a = new Accumulator <TEvent, TState>(_fold, state);

                a.Execute(interpret);
                return(ListModule.OfSeq(a.Accumulated));
            }

            return(await FSharpAsync.StartAsTask(Transact(FuncConvert.FromFunc <TState, FSharpList <TEvent> >(decide_)), null, null));
        }
 public static async Task WarmUpAsync()
 {
     try
     {
         var fsasync = CodeFormatter.FormatDocumentAsync("tmp.fs", SourceOrigin.SourceOrigin.NewSourceString(SampleCode), FormatConfig.FormatConfig.Default, FSharpParsingOptions.Default, FSharpChecker.Create(null, null, null, null, null, null, null, null, null));
         var _       = await FSharpAsync.StartAsTask(fsasync, null, null);
     }
     catch (Exception ex)
     {
         Trace.TraceError(ex.ToString());
     }
 }
Esempio n. 7
0
        public static Tuple <Action, FSharpMailboxProcessor <SystemMessage> > StartSystemMailbox(IProcess self, ProcessId supervisor)
        {
            bool   active = true;
            Action quit   = () => active = false;

            var body = FuncConvert.ToFSharpFunc <FSharpMailboxProcessor <SystemMessage>, FSharpAsync <Microsoft.FSharp.Core.Unit> >(
                mbox =>

                CreateAsync <Microsoft.FSharp.Core.Unit>(async() =>
            {
                while (active)
                {
                    var msg = await FSharpAsync.StartAsTask(mbox.Receive(FSharpOption <int> .None), FSharpOption <TaskCreationOptions> .None, FSharpOption <CancellationToken> .None);

                    if (msg == null || !active)
                    {
                        active = false;
                    }
                    else
                    {
                        switch (msg.GetType().Name)
                        {
                        case "SystemShutdownMessage":
                            self.Shutdown();
                            active = false;
                            break;

                        case "SystemChildIsFaultedMessage":
                            ((IProcessInternal)self).HandleFaultedChild((SystemChildIsFaultedMessage)msg);
                            break;

                        case "SystemRestartMessage":
                            self.Restart();
                            break;

                        case "SystemUnLinkChildMessage":
                            ((IProcessInternal)self).UnlinkChild(((SystemUnLinkChildMessage)msg).ChildId);
                            break;
                        }
                    }
                }

                return(null);
            })
                );

            var mailbox = FSharpMailboxProcessor <SystemMessage> .Start(body, FSharpOption <CancellationToken> .None);

            mailbox.Error += (object sender, Exception args) =>
                             Process.tell(supervisor, SystemMessage.ChildIsFaulted(self.Id, args));
            return(tuple(quit, mailbox));
        }
Esempio n. 8
0
        public async void AsyncLambda()
        {
            var x = 0;

            Equal(x, 0);
            var t = new Task(() => { x = 1; });

            A0(async() => { await t; });
            await FSharpAsync.StartAsTask(FSharpAsync.Sleep(200), null, null);

            // await Task.Delay(200);
            Equal(x, 1);
        }
Esempio n. 9
0
        public Task <HttpResponseMessage> ExecuteRequest(string url = "http://www.com", string user = null)
        {
            var request = new HttpRequestMessage();

            request.RequestUri = new Uri(url);
            if (user != null)
            {
                request.Headers.Add(UserHeader, user);
            }

            var reader   = client(request, default(CancellationToken));
            var response = reader.Item.Invoke(Dependencies.Object);

            return(FSharpAsync.StartAsTask(response, FSharpOption <TaskCreationOptions> .None, FSharpOption <CancellationToken> .None));
        }
    protected override async Task Compile(
        string code,
        string[] references)
    {
        var sourcePath = Path.GetTempFileName() + ".fs";

        File.WriteAllText(sourcePath, code);

        var compilerArgs =
            new[] {
            "fsc",
            sourcePath,
            $"--out:{FileName}",
            $"--pdb:{PdbName}",
            $"--lib:\"{BasePath}\"",
            "--debug",
            "--target:library"
        }
        .Concat(GetStandardReferences().Concat(references).Select(r => $"--reference:{r}"))
        .ToArray();

        var checker = FSharpChecker.Create(
            FSharpOption <int> .None,
            FSharpOption <bool> .None,
            FSharpOption <bool> .None,
#pragma warning disable CS0618
            FSharpOption <LegacyReferenceResolver> .None,
#pragma warning restore CS0618
            FSharpOption <FSharpFunc <Tuple <string, DateTime>, FSharpOption <Tuple <object, IntPtr, int> > > > .None,
            FSharpOption <bool> .None,
            FSharpOption <bool> .None,
            FSharpOption <bool> .None,
            FSharpOption <bool> .None
            );

        var resultFSharpAsync = checker.Compile(compilerArgs, FSharpOption <string> .None);
        var result            = await FSharpAsync.StartAsTask(resultFSharpAsync, FSharpOption <TaskCreationOptions> .None, FSharpOption <CancellationToken> .None);

        if (result.Item2 != 0)
        {
            var errors =
                result
                .Item1
                .Select(e => $"{e.FileName}({e.StartLine},{e.StartColumn}): {(e.Severity.IsError ? "error" : "warning")} {e.ErrorNumber}: {e.Message}");

            throw new InvalidOperationException($"Compilation Failed:{Environment.NewLine}{string.Join(Environment.NewLine, errors)}");
        }
    }
        public async void TargetMethodReturningFSharpAsync_CanBeInvokedViaExecute()
        {
            // Arrange
            var executor = GetExecutorForMethod("FSharpAsyncMethod");

            // Act
            var fsharpAsync = (FSharpAsync <string>)executor.Execute(_targetObject, new object[] { "test result" });
            var result      = await FSharpAsync.StartAsTask(fsharpAsync,
                                                            FSharpOption <TaskCreationOptions> .None,
                                                            FSharpOption <CancellationToken> .None);

            // Assert
            Assert.True(executor.IsMethodAsync);
            Assert.Same(typeof(string), executor.AsyncResultType);
            Assert.Equal("test result", result);
        }
Esempio n. 12
0
        TryParseAndCheckAsync(string path, ISourceText sourceText, CancellationToken token)
        {
            if (this.projectOptions == null)
            {
                var optionsAsync = _provider.CheckerInstance.GetProjectOptionsFromScript(
                    filename: path,
                    source: sourceText,
                    assumeDotNetFramework: false,
                    useSdkRefs: true,
                    useFsiAuxLib: true,
                    previewEnabled: true,
                    otherFlags: new string[] { "--targetprofile:netstandard" },
                    loadedTimeStamp: null,
                    extraProjectInfo: null,
                    optionsStamp: null,
                    userOpName: null,
                    sdkDirOverride: null
                    );

                var(options, errors) = await FSharpAsync.StartAsTask(optionsAsync, null, token);

                if (!errors.IsEmpty)
                {
                    return(null, null);
                }

                this.projectOptions = options;
            }

            var performParseAndCheck = _provider.CheckerInstance.ParseAndCheckFileInProject(
                filename: path,
                fileVersion: 1,
                sourceText: sourceText,
                options: projectOptions,
                userOpName: null
                );

            var(parseResults, checkAnswer) = await FSharpAsync.StartAsTask(performParseAndCheck, null, token);

            if (checkAnswer is FSharpCheckFileAnswer.Succeeded succeeded)
            {
                return(parseResults, succeeded.Item);
            }

            return(parseResults, null);
        }
Esempio n. 13
0
        public static Assembly Compile(string source)
        {
            var fileHelpersAssembly = typeof(EngineBase).Assembly;

            var checker = FSharpChecker.Create(
                FSharpOption <int> .None,
                FSharpOption <bool> .None,
                FSharpOption <bool> .None,
                FSharpOption <LegacyReferenceResolver> .None,
                FSharpOption <FSharpFunc <Tuple <string, DateTime>, FSharpOption <Tuple <object, IntPtr, int> > > > .None,
                FSharpOption <bool> .None,
                FSharpOption <bool> .None,
                FSharpOption <bool> .None,
                FSharpOption <bool> .None);

            var file = Path.GetTempFileName();

            File.WriteAllText(file + ".fs", source);

            var action = checker.CompileToDynamicAssembly(
                new[] { "-o", file + ".dll", "-a", file + ".fs", "--reference:" + fileHelpersAssembly.Location },
                FSharpOption <Tuple <TextWriter, TextWriter> > .None,
                FSharpOption <string> .None);

            var compileResult = FSharpAsync
                                .StartAsTask(action, FSharpOption <TaskCreationOptions> .None, FSharpOption <CancellationToken> .None)
                                .Result;

            var exitCode          = compileResult.Item2;
            var compilationErrors = compileResult.Item1;

            if (compilationErrors.Any() && exitCode != 0)
            {
                var errors = new StringBuilder();

                foreach (var error in compilationErrors)
                {
                    errors.AppendLine(error.ToString());
                }

                throw new InvalidOperationException($"Cannot compile fsharp: {errors}");
            }

            return(compileResult.Item3.Value);
        }
        public async void TargetMethodReturningFailingFSharpAsync_CanBeInvokedViaExecute()
        {
            // Arrange
            var executor = GetExecutorForMethod("FSharpAsyncFailureMethod");

            // Act
            var fsharpAsync = (FSharpAsync <string>)executor.Execute(_targetObject, new object[] { "test result" });
            var resultTask  = FSharpAsync.StartAsTask(fsharpAsync,
                                                      FSharpOption <TaskCreationOptions> .None,
                                                      FSharpOption <CancellationToken> .None);

            // Assert
            Assert.True(executor.IsMethodAsync);
            Assert.Same(typeof(string), executor.AsyncResultType);

            var exception = await Assert.ThrowsAsync <AggregateException>(async() => await resultTask);

            Assert.IsType(typeof(InvalidOperationException), exception.InnerException);
            Assert.Equal("Test exception", exception.InnerException.Message);
        }
Esempio n. 15
0
        public async Task Invoke(HttpContext context)
        {
            var suaveContext = await context.ToSuaveHttpContext(_preserveHttpHeaderCasing);
            var asyncWorkflow = _app.Invoke(suaveContext);

            var result = await FSharpAsync.StartAsTask(
                asyncWorkflow,
                FSharpOption<TaskCreationOptions>.Some(TaskCreationOptions.None),
                FSharpOption<CancellationToken>.Some(CancellationToken.None));

            // Set the Suave result if the request could be handled by Suave
            if (FSharpOption<Http.HttpContext>.get_IsSome(result))
            {
                await context.SetResponseFromSuaveResult(result.Value.response);
            }
            else
            {
                await _next.Invoke(context);
            }
        }
Esempio n. 16
0
        TryParseAsync(string path, ISourceText sourceText, CancellationToken token)
        {
            if (parseOpts == null)
            {
                var defaults = FSharpParsingOptions.Default;
                this.parseOpts = new FSharpParsingOptions(
                    sourceFiles: new string[] { path },
                    conditionalCompilationDefines: defaults.ConditionalCompilationDefines,
                    errorSeverityOptions: defaults.ErrorSeverityOptions,
                    isInteractive: defaults.IsInteractive,
                    lightSyntax: defaults.LightSyntax,
                    compilingFsLib: defaults.CompilingFsLib,
                    isExe: defaults.IsExe
                    );
            }

            var parseAsync   = _provider.CheckerInstance.ParseFile(path, sourceText, parseOpts, "FsLint");
            var parseResults = await FSharpAsync.StartAsTask(parseAsync, null, token).ConfigureAwait(false);

            return(parseResults, null);
        }
        public async Task Invoke(HttpContext context)
        {
            try
            {
                await _next(context);
            }
            catch (Exception ex)
            {
                try
                {
                    var suaveContext = await context.ToSuaveHttpContext(_preserveHttpHeaderCasing);

                    var asyncWorkflow = _errorHandler.Invoke(ex).Invoke("").Invoke(suaveContext);

                    var result = await FSharpAsync.StartAsTask(
                        asyncWorkflow,
                        FSharpOption <TaskCreationOptions> .Some(TaskCreationOptions.None),
                        FSharpOption <CancellationToken> .Some(CancellationToken.None));

                    // Set the Suave result if the request could be handled by Suave and return
                    if (FSharpOption <Http.HttpContext> .get_IsSome(result))
                    {
                        await context.SetResponseFromSuaveResult(result.Value.response);

                        return;
                    }
                }
                catch (Exception ex2)
                {
                    _logger.LogError(0, ex, $"An unhandled exception has occured: {ex.Message}.");
                    _logger.LogError(0, ex2, $"An exception was thrown attempting to execute the error handler: {ex2.Message}.");
                }

                // Re -throw the original exception
                throw;
            }
        }
Esempio n. 18
0
        /// <summary>
        /// Clears the state (keeps the mailbox items)
        /// </summary>
        public Unit Restart()
        {
            lock (actorLock)
            {
                // Take a copy of the messages from the dead mailbox
                var msgs = new Queue <UserControlMessage>(userMailbox.CurrentQueueLength);
                while (userMailbox.CurrentQueueLength > 0)
                {
                    UserControlMessage userMessage = FSharpAsync.StartAsTask(
                        userMailbox.Receive(FSharpOption <int> .None),
                        FSharpOption <TaskCreationOptions> .None,
                        FSharpOption <CancellationToken> .None
                        ).Result;

                    if (userMessage != null)
                    {
                        msgs.Enqueue(userMessage);
                    }
                }

                // We shutdown the children, because we're about to restart which will
                // recreate them.
                Shutdown(false);

                // Start new mailboxes
                StartMailboxes();

                // Copy the old messages
                while (msgs.Count > 0)
                {
                    userMailbox.Post(msgs.Dequeue());
                }

                return(unit);
            }
        }
        /// <summary>
        /// Prevents dead locks when waiting for FCS while under write lock.
        /// FCS may request a read lock from a background thread before processing this request.
        /// We grant read access by passing the write lock.
        /// </summary>
        private static T RunTransferringWriteLock <T>(FSharpAsync <T> async)
        {
            var shellLocks = Shell.Instance.GetComponent <IShellLocks>();

            shellLocks.AssertWriteAccessAllowed();

            var task = FSharpAsync.StartAsTask(async, null, null);
            var isLockTransferred = false;

            while (!task.IsCompleted || isLockTransferred)
            {
                var finished = task.Wait(InterruptCheckTimeout, ourEternalCancellationToken);
                if (finished)
                {
                    if (!isLockTransferred)
                    {
                        break;
                    }

                    Thread.Sleep(GetTransferredWriteLockTimeout);
                }

                if (!isLockTransferred && FSharpLocks.ThreadRequestingWriteLock != null)
                {
                    isLockTransferred = true;
                    shellLocks.ContentModelLocks.TransferWriteLock(FSharpLocks.ThreadRequestingWriteLock);
                }

                if (isLockTransferred && shellLocks.IsWriteAccessAllowed())
                {
                    isLockTransferred = false;
                }
            }

            return(task.Result);
        }
        public async Task DoUpdateAsync()
        {
            if (IsDisposed)
            {
                return;
            }

            var buffer = _currentSnapshot;
            var path   = _document.FilePath;

            // replace with user token
            var token    = _cts.Token;
            var instance = await FsLintVsPackage.Instance.WithCancellation(token);

            // this acts as a throttle
            await Task.Delay(200, token);

            if (Project == null)
            {
                await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

                var project = instance.Dte.Solution.FindProjectItem(path)?.ContainingProject;

                if (project == null)
                {
                    return;
                }

                if (instance.SolutionService.GetProjectOfUniqueName(project.UniqueName, out var vsHierarchy) != VSConstants.S_OK)
                {
                    return;
                }

                if (instance.SolutionService.GetGuidOfProject(vsHierarchy, out var guid) != VSConstants.S_OK)
                {
                    return;
                }

                Project = new LintProjectInfo(project.Name, guid, vsHierarchy);
            }

            await Task.Yield();

            var connectionString = SqlAnalyzer.tryFindConnectionString(path);

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                return;
            }

            var loadedSchema = SqlAnalysis.databaseSchema(connectionString);

            if (loadedSchema.IsError)
            {
                return;
            }

            var source     = _currentSnapshot.GetText();
            var sourceText = SourceText.ofString(source);

            var getProjectOptions = _provider.CheckerInstance.GetProjectOptionsFromScript(
                filename: path,
                sourceText: sourceText,
                assumeDotNetFramework: false,
                useSdkRefs: true,
                useFsiAuxLib: true,
                previewEnabled: true,
                otherFlags: new string[] { "--targetprofile:netstandard" },
                loadedTimeStamp: FSharpOption <DateTime> .None,
                extraProjectInfo: FSharpOption <object> .None,
                optionsStamp: FSharpOption <long> .None,
                userOpName: FSharpOption <string> .None
                );

            var(options, errors) = await FSharpAsync.StartAsTask(getProjectOptions, null, token);

            if (errors.Any())
            {
                return;
            }

            var performParseAndCheck = _provider.CheckerInstance.ParseAndCheckFileInProject(
                filename: path,
                fileversion: 1,
                sourceText: sourceText,
                options: options,
                textSnapshotInfo: FSharpOption <object> .None,
                userOpName: FSharpOption <string> .None
                );

            var(parseResults, checkAnswer) = await FSharpAsync.StartAsTask(performParseAndCheck, null, token);

            if (parseResults.ParseHadErrors || checkAnswer.IsAborted)
            {
                return;
            }

            var checkResults = SqlAnalyzer.checkAnswerResult(checkAnswer).Value;

            var context = new SqlAnalyzerContext(
                fileName: path,
                content: source.Split('\n'),
                parseTree: parseResults.ParseTree.Value,
                symbols: SqlAnalyzer.getSymbols(checkResults)
                );

            var databaseSchema = loadedSchema.ResultValue;

            var errorMessages =
                from operation in SyntacticAnalysis.findSqlOperations(context)
                from analysisOutput in SqlAnalysis.analyzeOperation(operation, connectionString, databaseSchema)
                select analysisOutput;

            var oldLintingErrors = this.Factory.CurrentSnapshot;
            var newLintErrors    = new LintingErrorsSnapshot(_document, oldLintingErrors.VersionNumber + 1);

            foreach (var error in errorMessages)
            {
                var span = RangeToSpan(error.Range, buffer);
                newLintErrors.Errors.Add(new LintError(span, error, Project));
            }

            await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

            if (token.IsCancellationRequested)
            {
                return;
            }

            UpdateLintingErrors(newLintErrors);
        }
Esempio n. 21
0
        public async Task DoUpdateAsync()
        {
            if (IsDisposed)
            {
                return;
            }

            var buffer = _currentSnapshot;
            var path   = _document.FilePath;

            // replace with user token
            var token    = _cts.Token;
            var instance = await FsLintVsPackage.Instance.WithCancellation(token);

            // this acts as a throttle
            await Task.Delay(200, token);

            if (Project == null)
            {
                await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

                var project = instance.Dte.Solution.FindProjectItem(path)?.ContainingProject;

                if (project == null)
                {
                    return;
                }

                if (instance.SolutionService.GetProjectOfUniqueName(project.UniqueName, out var vsHierarchy) != VSConstants.S_OK)
                {
                    return;
                }

                if (instance.SolutionService.GetGuidOfProject(vsHierarchy, out var guid) != VSConstants.S_OK)
                {
                    return;
                }

                Project = new LintProjectInfo(project.Name, guid, vsHierarchy);
            }

            await Task.Yield();

            var connectionString = SqlAnalyzer.tryFindConnectionString(path);

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                return;
            }



            var source     = _currentSnapshot.GetText();
            var sourceText = SourceText.ofString(source);

            var getProjectOptions = _provider.CheckerInstance.GetProjectOptionsFromScript(
                filename: path,
                source: sourceText,
                assumeDotNetFramework: false,
                useSdkRefs: true,
                useFsiAuxLib: true,
                previewEnabled: true,
                otherFlags: new string[] { "--targetprofile:netstandard" },
                loadedTimeStamp: FSharpOption <DateTime> .None,
                extraProjectInfo: FSharpOption <object> .None,
                optionsStamp: FSharpOption <long> .None,
                userOpName: FSharpOption <string> .None,
                sdkDirOverride: FSharpOption <string> .None
                );

            var(options, errors) = await FSharpAsync.StartAsTask(getProjectOptions, null, token);

            if (errors.Any())
            {
                return;
            }

            var performParseAndCheck = _provider.CheckerInstance.ParseAndCheckFileInProject(
                filename: path,
                fileVersion: 1,
                sourceText: sourceText,
                options: options,
                userOpName: FSharpOption <string> .None
                );

            var(parseResults, checkAnswer) = await FSharpAsync.StartAsTask(performParseAndCheck, null, token);

            if (parseResults.ParseHadErrors || checkAnswer.IsAborted)
            {
                return;
            }

            var checkResults = SqlAnalyzer.checkAnswerResult(checkAnswer).Value;

            var context = new SqlAnalyzerContext(
                fileName: path,
                content: source.Split('\n'),
                parseTree: parseResults.ParseTree.Value,
                symbols: SqlAnalyzer.getSymbols(checkResults)
                );

            var operationBlocks = SyntacticAnalysis.findSqlOperations(context);
            var loadedSchema    = SqlAnalysis.databaseSchema(connectionString);

            var errorMessages = new List <Message>();

            if (loadedSchema.IsError)
            {
                foreach (var operation in operationBlocks)
                {
                    var containsSkipAnalysis = operation.blocks.Any(block => block.IsSkipAnalysis);
                    foreach (var block in operation.blocks)
                    {
                        var blockRange = block.Range();
                        if ((block.IsQuery || block.IsTransaction) && OptionModule.IsSome(blockRange) && !containsSkipAnalysis)
                        {
                            var internalError = (loadedSchema.ErrorValue ?? "").Replace("3D000:", "").Replace("28P01:", "");
                            var fullError     = $"Error occured while trying to connect to the database using the configured connection string in NPGSQL_FSHARP in order to perform static analysis:{internalError}";
                            var errorMessage  = new Message(
                                type: "Error",
                                message: fullError,
                                code: "SQL101",
                                severity: Severity.Warning,
                                range: blockRange.Value,
                                fixes: Microsoft.FSharp.Collections.FSharpList <Fix> .Empty
                                );

                            errorMessages.Add(errorMessage);
                        }
                    }
                }
            }
            else
            {
                var databaseSchema = loadedSchema.ResultValue;
                foreach (var operation in operationBlocks)
                {
                    foreach (var analysisOutput in SqlAnalysis.analyzeOperation(operation, connectionString, databaseSchema))
                    {
                        errorMessages.Add(analysisOutput);
                    }
                }
            }

            var oldLintingErrors = this.Factory.CurrentSnapshot;
            var newLintErrors    = new LintingErrorsSnapshot(_document, oldLintingErrors.VersionNumber + 1);

            foreach (var error in errorMessages)
            {
                var span = RangeToSpan(error.Range, buffer);
                newLintErrors.Errors.Add(new LintError(span, error, Project));
            }

            await instance.JoinableTaskFactory.SwitchToMainThreadAsync();

            if (token.IsCancellationRequested)
            {
                return;
            }

            UpdateLintingErrors(newLintErrors);
        }
Esempio n. 22
0
 /// <summary>
 /// ExecuteAsyncTask
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="task"></param>
 /// <returns></returns>
 static public Task <T> ExecuteAsyncTask <T>(this FSharpAsync <T> task)
 {
     return(FSharpAsync.StartAsTask <T>(task, FSharpOption <TaskCreationOptions> .None, FSharpOption <CancellationToken> .None));
 }
Esempio n. 23
0
 // Project from the synchronized state, without the possibility of adding events that Decide(Func) admits
 public async Task <T> Query <T>(Func <TState, T> project) =>
 await FSharpAsync.StartAsTask(Query(FuncConvert.FromFunc(project)), null, null);
Esempio n. 24
0
 // Execute a command, as Decide(Action) does, but also yield an outcome from the decision
 public async Task <T> Decide <T>(Func <Context <TEvent, TState>, T> interpret) =>
 await FSharpAsync.StartAsTask <T>(Decide(FuncConvert.FromFunc(interpret)), null, null);
Esempio n. 25
0
 // Run the decision method, letting it decide whether or not the Command's intent should manifest as Events
 public async Task <Unit> Execute(Action <Context <TEvent, TState> > decide) =>
 await FSharpAsync.StartAsTask(Decide(FuncConvert.ToFSharpFunc(decide)), null, null);
Esempio n. 26
0
 public static void TestAsync <T>(FSharpAsync <T> async, T expected)
 => TestTask(FSharpAsync.StartAsTask(async, null, null), expected);
Esempio n. 27
0
 public static Task <R[]> Parallel <R>(IEnumerable <Task <R> > computations) =>
 FSharpAsync.StartAsTask(FSharpAsync.Parallel <R>(computations.Select(FSharpAsync.AwaitTask)), FSharpOption <TaskCreationOptions> .None, FSharpOption <System.Threading.CancellationToken> .None);
Esempio n. 28
0
 public static Task <T> ToTask <T>(this FSharpAsync <T> task)
 {
     return(FSharpAsync.StartAsTask(task, null, null));
 }
Esempio n. 29
0
        public HttpResponseMessage AddToCache(
            DateTime cahcedUntil,
            string url              = "http://www.com",
            string user             = null,
            byte?addRequestContent  = null,
            byte?addResponseContent = null,
            HttpMethod method       = null,
            Headers.CacheSettings.ExpirySettings expiry     = null,
            KeyValuePair <string, string[]>[] customHeaders = null)
        {
            expiry      = expiry ?? Headers.CacheSettings.ExpirySettings.NewHardUtc(DateTime.UtcNow.AddDays(10));
            cahcedUntil = new DateTime(cahcedUntil.Ticks, DateTimeKind.Utc);
            var response = new HttpResponseMessage();

            response.RequestMessage = new HttpRequestMessage();
            if (addRequestContent != null)
            {
                response.RequestMessage.Content = new SingleByteContent(addRequestContent.Value);
            }
            if (addResponseContent != null)
            {
                response.Content = new SingleByteContent(addResponseContent.Value);
            }
            if (customHeaders != null)
            {
                foreach (var h in customHeaders)
                {
                    response.Headers.Add(h.Key, h.Value);
                }
            }

            var m = (method == null || method == HttpMethod.Get) ? "G" : null;

            if (m == null)
            {
                throw new NotSupportedException(method?.ToString() ?? "null");
            }

            user = user?.Replace("$", "$$");
            var key = $"{m}$:{user}$:{new Uri(url)}";

            Dependencies
            .Setup(x => x.Cache.Get(It.Is <string>(k => k == key)))
            .Returns(Returns);

            return(response);

            FSharpAsync <FSharpOption <CachedValues> > Returns()
            {
                return(FSharpAsync.AwaitTask(ReturnsAsync()));
            }

            async Task <FSharpOption <CachedValues> > ReturnsAsync()
            {
                var resp = await FSharpAsync.StartAsTask(
                    CachedResponse.build(response),
                    FSharpOption <TaskCreationOptions> .None,
                    FSharpOption <CancellationToken> .None);

                return(FSharpOption <CachedValues> .Some(new CachedValues(
                                                             resp,
                                                             new Headers.CacheSettings.CacheSettings(expiry, true))));
            }
        }
Esempio n. 30
0
 public static Task <T> ToTask <T>(this FSharpAsync <T> item) =>
 FSharpAsync.StartAsTask(
     item,
     FSharpOption <TaskCreationOptions> .None,
     FSharpOption <CancellationToken> .None
     );