示例#1
0
        public void Production(ScriptRegion region)
        {
            float budget = Wealth * 0.01f;
            float cost   = 0;

            foreach (ResourceAmount resourceAmount in ProductionInputPerSize)
            {
                cost += region.ResourceList[resourceAmount.Resource].Price * resourceAmount.Amount * Size;
            }
            ActivityProduction = Mathf.Min(budget / cost, 1);


            Wealth -= cost * ActivityProduction;
            foreach (ResourceAmount resourceAmount in ProductionInputPerSize)
            {
                region.ResourceList[resourceAmount.Resource].Consumption += resourceAmount.Amount * Size * ActivityProduction;
            }
            foreach (ResourceAmount resourceAmount in ProductionOutputPerSize)
            {
                float production = resourceAmount.Amount * Size * ActivityProduction;
                print(region.ResourceList.Count);
                region.ResourceList[resourceAmount.Resource].Production += production;
                Wealth += region.ResourceList[resourceAmount.Resource].Price * production;
            }
        }
 private IReadOnlyList <SymbolReference> GetOccurrences(ScriptRegion scriptRegion)
 {
     return(SymbolsService.FindOccurrencesInFile(
                GetScriptFile(scriptRegion),
                scriptRegion.StartLineNumber,
                scriptRegion.StartColumnNumber));
 }
 private Task <ParameterSetSignatures> GetParamSetSignatures(ScriptRegion scriptRegion)
 {
     return(symbolsService.FindParameterSetsInFileAsync(
                GetScriptFile(scriptRegion),
                scriptRegion.StartLineNumber,
                scriptRegion.StartColumnNumber));
 }
示例#4
0
        public void Upkeep(ScriptRegion region)
        {
            float budget = Wealth * 0.01f;
            float cost   = 0;

            foreach (ResourceAmount resourceAmount in UpkeepInputPerSize)
            {
                cost += region.ResourceList[resourceAmount.Resource].Price * resourceAmount.Amount * Size;
            }

            ActivityUpkeep = Mathf.Min(budget / cost, GrowthLimit);

            Wealth -= cost * ActivityUpkeep;
            foreach (ResourceAmount resourceAmount in UpkeepInputPerSize)
            {
                region.ResourceList[resourceAmount.Resource].Consumption += resourceAmount.Amount * Size * ActivityUpkeep;
            }

            foreach (ResourceAmount resourceAmount in UpkeepOutputPerSize)
            {
                region.ResourceList[resourceAmount.Resource].Consumption += resourceAmount.Amount * Size * ActivityUpkeep;
            }

            Growth = GrowthBase + (GrowthMultiplier * ActivityUpkeep);
            Size  *= Growth;
        }
示例#5
0
 private async Task <ParameterSetSignatures> GetParamSetSignatures(ScriptRegion scriptRegion)
 {
     return
         (await this.languageService.FindParameterSetsInFile(
              GetScriptFile(scriptRegion),
              scriptRegion.StartLineNumber,
              scriptRegion.StartColumnNumber));
 }
示例#6
0
 private FindOccurrencesResult GetOccurrences(ScriptRegion scriptRegion)
 {
     return
         (this.languageService.FindOccurrencesInFile(
              GetScriptFile(scriptRegion),
              scriptRegion.StartLineNumber,
              scriptRegion.StartColumnNumber));
 }
示例#7
0
 private Task <IEnumerable <CompletionItem> > GetCompletionResultsAsync(ScriptRegion scriptRegion)
 {
     return(completionHandler.GetCompletionsInFileAsync(
                GetScriptFile(scriptRegion),
                scriptRegion.StartLineNumber,
                scriptRegion.StartColumnNumber,
                CancellationToken.None));
 }
 private async Task <CompletionResults> GetCompletionResults(ScriptRegion scriptRegion)
 {
     // Run the completions request
     return
         (await this.completionHandler.GetCompletionsInFileAsync(
              GetScriptFile(scriptRegion),
              scriptRegion.StartLineNumber,
              scriptRegion.StartColumnNumber).ConfigureAwait(false));
 }
示例#9
0
 private async Task <CompletionResults> GetCompletionResults(ScriptRegion scriptRegion)
 {
     // Run the completions request
     return
         (await this.languageService.GetCompletionsInFile(
              GetScriptFile(scriptRegion),
              scriptRegion.StartLineNumber,
              scriptRegion.StartColumnNumber));
 }
 private async Task <ParameterSetSignatures> GetParamSetSignatures(ScriptRegion scriptRegion)
 {
     return
         (await this.symbolsService.FindParameterSetsInFileAsync(
              GetScriptFile(scriptRegion),
              scriptRegion.StartLineNumber,
              scriptRegion.StartColumnNumber,
              powerShellContext).ConfigureAwait(false));
 }
        public SymbolReference(SymbolType symbolType, IScriptExtent scriptExtent, string symbolName, string filePath, string sourceLine)
        {
            // TODO: Verify params
            SymbolType   = symbolType;
            ScriptRegion = ScriptRegion.Create(scriptExtent);
            SymbolName   = symbolName;
            FilePath     = filePath;
            SourceLine   = sourceLine;

            // TODO: Make sure end column number usage is correct
        }
示例#12
0
        private ScriptFile GetScriptFile(ScriptRegion scriptRegion)
        {
            string resolvedPath =
                Path.Combine(
                    baseSharedScriptPath,
                    scriptRegion.File);

            return
                (this.workspace.GetFile(
                     resolvedPath));
        }
        /// <summary>
        /// Constructs an instance of a ParameterSetSignatures object
        /// </summary>
        /// <param name="commandInfoSet">Collection of parameter set info</param>
        /// <param name="foundSymbol"> The SymbolReference of the command</param>
        public ParameterSetSignatures(IEnumerable <CommandParameterSetInfo> commandInfoSet, SymbolReference foundSymbol)
        {
            List <ParameterSetSignature> paramSetSignatures = new();

            foreach (CommandParameterSetInfo setInfo in commandInfoSet)
            {
                paramSetSignatures.Add(new ParameterSetSignature(setInfo));
            }
            Signatures   = paramSetSignatures.ToArray();
            CommandName  = foundSymbol.ScriptRegion.Text;
            ScriptRegion = foundSymbol.ScriptRegion;
        }
        private Task <SymbolReference> GetDefinition(ScriptRegion scriptRegion)
        {
            ScriptFile scriptFile = GetScriptFile(scriptRegion);

            SymbolReference symbolReference = SymbolsService.FindSymbolAtLocation(
                scriptFile,
                scriptRegion.StartLineNumber,
                scriptRegion.StartColumnNumber);

            Assert.NotNull(symbolReference);

            return(symbolsService.GetDefinitionOfSymbolAsync(scriptFile, symbolReference));
        }
示例#15
0
        private ScriptFile GetScriptFile(ScriptRegion scriptRegion)
        {
            const string baseSharedScriptPath =
                @"..\..\..\PowerShellEditorServices.Test.Shared\";

            string resolvedPath =
                Path.Combine(
                    baseSharedScriptPath,
                    scriptRegion.File);

            return
                (this.workspace.GetFile(
                     resolvedPath));
        }
        /// <summary>
        /// Handle a CodeLens resolve request from VSCode.
        /// </summary>
        /// <param name="codeLens">The CodeLens to be resolved/updated.</param>
        /// <param name="requestContext"></param>
        private async Task HandleCodeLensResolveRequest(
            LanguageServer.CodeLens codeLens,
            RequestContext <LanguageServer.CodeLens> requestContext)
        {
            if (codeLens.Data != null)
            {
                // TODO: Catch deserializtion exception on bad object
                CodeLensData codeLensData = codeLens.Data.ToObject <CodeLensData>();

                ICodeLensProvider originalProvider =
                    Providers.FirstOrDefault(
                        provider => provider.ProviderId.Equals(codeLensData.ProviderId));

                if (originalProvider != null)
                {
                    ScriptFile scriptFile =
                        _editorSession.Workspace.GetFile(
                            codeLensData.Uri);

                    ScriptRegion region = new ScriptRegion
                    {
                        StartLineNumber   = codeLens.Range.Start.Line + 1,
                        StartColumnNumber = codeLens.Range.Start.Character + 1,
                        EndLineNumber     = codeLens.Range.End.Line + 1,
                        EndColumnNumber   = codeLens.Range.End.Character + 1
                    };

                    CodeLens originalCodeLens =
                        new CodeLens(
                            originalProvider,
                            scriptFile,
                            region);

                    var resolvedCodeLens =
                        await originalProvider.ResolveCodeLensAsync(
                            originalCodeLens,
                            CancellationToken.None);

                    await requestContext.SendResult(
                        resolvedCodeLens.ToProtocolCodeLens(
                            _jsonSerializer));
                }
                else
                {
                    await requestContext.SendError(
                        $"Could not find provider for the original CodeLens: {codeLensData.ProviderId}");
                }
            }
        }
        private Task <List <SymbolReference> > GetReferences(ScriptRegion scriptRegion)
        {
            ScriptFile scriptFile = GetScriptFile(scriptRegion);

            SymbolReference symbolReference = SymbolsService.FindSymbolAtLocation(
                scriptFile,
                scriptRegion.StartLineNumber,
                scriptRegion.StartColumnNumber);

            Assert.NotNull(symbolReference);

            return(symbolsService.FindReferencesOfSymbol(
                       symbolReference,
                       workspace.ExpandScriptReferences(scriptFile),
                       workspace));
        }
示例#18
0
 private static Range GetRangeFromScriptRegion(ScriptRegion scriptRegion)
 {
     return(new Range
     {
         Start = new Position
         {
             Line = scriptRegion.StartLineNumber - 1,
             Character = scriptRegion.StartColumnNumber - 1
         },
         End = new Position
         {
             Line = scriptRegion.EndLineNumber - 1,
             Character = scriptRegion.EndColumnNumber - 1
         }
     });
 }
示例#19
0
        private async Task <FindReferencesResult> GetReferences(ScriptRegion scriptRegion)
        {
            ScriptFile scriptFile = GetScriptFile(scriptRegion);

            SymbolReference symbolReference =
                this.languageService.FindSymbolAtLocation(
                    scriptFile,
                    scriptRegion.StartLineNumber,
                    scriptRegion.StartColumnNumber);

            Assert.NotNull(symbolReference);

            return
                (await this.languageService.FindReferencesOfSymbol(
                     symbolReference,
                     this.workspace.ExpandScriptReferences(scriptFile)));
        }
示例#20
0
        private async Task <GetDefinitionResult> GetDefinition(ScriptRegion scriptRegion, Workspace workspace)
        {
            ScriptFile scriptFile = GetScriptFile(scriptRegion);

            SymbolReference symbolReference =
                this.languageService.FindSymbolAtLocation(
                    scriptFile,
                    scriptRegion.StartLineNumber,
                    scriptRegion.StartColumnNumber);

            Assert.NotNull(symbolReference);

            return
                (await this.languageService.GetDefinitionOfSymbol(
                     scriptFile,
                     symbolReference,
                     workspace));
        }
        /// <summary>
        /// Constructs and instance of a SymbolReference
        /// </summary>
        /// <param name="symbolType">The higher level type of the symbol</param>
        /// <param name="symbolName">The name of the symbol</param>
        /// <param name="scriptExtent">The script extent of the symbol</param>
        /// <param name="filePath">The file path of the symbol</param>
        /// <param name="sourceLine">The line contents of the given symbol (defaults to empty string)</param>
        public SymbolReference(
            SymbolType symbolType,
            string symbolName,
            IScriptExtent scriptExtent,
            string filePath   = "",
            string sourceLine = "")
        {
            // TODO: Verify params
            this.SymbolType   = symbolType;
            this.SymbolName   = symbolName;
            this.ScriptRegion = ScriptRegion.Create(scriptExtent);
            this.FilePath     = filePath;
            this.SourceLine   = sourceLine;

            // TODO: Make sure end column number usage is correct

            // Build the display string
            //this.DisplayString =
            //    string.Format(
            //        "{0} {1}")
        }
示例#22
0
    // Update is called once per frame

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            _isDown = true;
        }

        else if (Input.GetMouseButtonUp(0))
        {
            //TODO use different raycasting to also hit ui
            if (_isDown)
            {
                _isDown = false;
                float rayDistance;
                Ray   ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (_groundPlane.Raycast(ray, out rayDistance))
                {
                    SelectedRegion = _worldManager.GetRegion(ray.GetPoint(rayDistance));
                }
            }
        }
    }
示例#23
0
 private async Task <GetDefinitionResult> GetDefinition(ScriptRegion scriptRegion)
 {
     return(await GetDefinition(scriptRegion, this.workspace));
 }
 private List <SymbolReference> FindSymbolsInFile(ScriptRegion scriptRegion) => symbolsService.FindSymbolsInFile(GetScriptFile(scriptRegion));
 private static Range GetRangeFromScriptRegion(ScriptRegion scriptRegion)
 {
     return new Range
     {
         Start = new Position
         {
             Line = scriptRegion.StartLineNumber - 1,
             Character = scriptRegion.StartColumnNumber - 1
         },
         End = new Position
         {
             Line = scriptRegion.EndLineNumber - 1,
             Character = scriptRegion.EndColumnNumber - 1
         }
     };
 }
 private FindOccurrencesResult FindSymbolsInFile(ScriptRegion scriptRegion)
 {
     return
         this.languageService.FindSymbolsInFile(
             GetScriptFile(scriptRegion));
 }
 private FindOccurrencesResult GetOccurrences(ScriptRegion scriptRegion)
 { 
     return
         this.languageService.FindOccurrencesInFile(
             GetScriptFile(scriptRegion),
             scriptRegion.StartLineNumber,
             scriptRegion.StartColumnNumber);
 }
        private async Task<FindReferencesResult> GetReferences(ScriptRegion scriptRegion)
        {
            ScriptFile scriptFile = GetScriptFile(scriptRegion);

            SymbolReference symbolReference =
                this.languageService.FindSymbolAtLocation(
                    scriptFile,
                    scriptRegion.StartLineNumber,
                    scriptRegion.StartColumnNumber);

            Assert.NotNull(symbolReference);

            return
                await this.languageService.FindReferencesOfSymbol(
                    symbolReference,
                    this.workspace.ExpandScriptReferences(scriptFile));
        }
 private async Task<ParameterSetSignatures> GetParamSetSignatures(ScriptRegion scriptRegion)
 {
     return
         await this.languageService.FindParameterSetsInFile(
             GetScriptFile(scriptRegion),
             scriptRegion.StartLineNumber,
             scriptRegion.StartColumnNumber);
 }
 private async Task<CompletionResults> GetCompletionResults(ScriptRegion scriptRegion)
 {
     // Run the completions request
     return
         await this.languageService.GetCompletionsInFile(
             GetScriptFile(scriptRegion),
             scriptRegion.StartLineNumber,
             scriptRegion.StartColumnNumber);
 }
        private ScriptFile GetScriptFile(ScriptRegion scriptRegion)
        {
            const string baseSharedScriptPath = 
                @"..\..\..\PowerShellEditorServices.Test.Shared\";

            string resolvedPath =
                Path.Combine(
                    baseSharedScriptPath, 
                    scriptRegion.File);

            return
                this.workspace.GetFile(
                    resolvedPath);
        }
示例#32
0
 private FindOccurrencesResult FindSymbolsInFile(ScriptRegion scriptRegion)
 {
     return
         (this.languageService.FindSymbolsInFile(
              GetScriptFile(scriptRegion)));
 }
 private ScriptFile GetScriptFile(ScriptRegion scriptRegion) => workspace.GetFile(TestUtilities.GetSharedPath(scriptRegion.File));
示例#34
0
        public override async Task <CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                _logger.LogDebug($"CodeAction request canceled at range: {request.Range}");
                return(Array.Empty <CommandOrCodeAction>());
            }

            IReadOnlyDictionary <string, IEnumerable <MarkerCorrection> > corrections = await _analysisService.GetMostRecentCodeActionsForFileAsync(
                request.TextDocument.Uri)
                                                                                        .ConfigureAwait(false);

            if (corrections == null)
            {
                return(Array.Empty <CommandOrCodeAction>());
            }

            List <CommandOrCodeAction> codeActions = new();

            // If there are any code fixes, send these commands first so they appear at top of "Code Fix" menu in the client UI.
            foreach (Diagnostic diagnostic in request.Context.Diagnostics)
            {
                if (string.IsNullOrEmpty(diagnostic.Code?.String))
                {
                    _logger.LogWarning(
                        $"textDocument/codeAction skipping diagnostic with empty Code field: {diagnostic.Source} {diagnostic.Message}");

                    continue;
                }

                string diagnosticId = AnalysisService.GetUniqueIdFromDiagnostic(diagnostic);
                if (corrections.TryGetValue(diagnosticId, out IEnumerable <MarkerCorrection> markerCorrections))
                {
                    foreach (MarkerCorrection markerCorrection in markerCorrections)
                    {
                        codeActions.Add(new CodeAction
                        {
                            Title = markerCorrection.Name,
                            Kind  = CodeActionKind.QuickFix,
                            Edit  = new WorkspaceEdit
                            {
                                DocumentChanges = new Container <WorkspaceEditDocumentChange>(
                                    new WorkspaceEditDocumentChange(
                                        new TextDocumentEdit
                                {
                                    TextDocument = new OptionalVersionedTextDocumentIdentifier
                                    {
                                        Uri = request.TextDocument.Uri
                                    },
                                    Edits = new TextEditContainer(ScriptRegion.ToTextEdit(markerCorrection.Edit))
                                }))
                            }
                        });
                    }
                }
            }

            // Add "show documentation" commands last so they appear at the bottom of the client UI.
            // These commands do not require code fixes. Sometimes we get a batch of diagnostics
            // to create commands for. No need to create multiple show doc commands for the same rule.
            HashSet <string> ruleNamesProcessed = new();

            foreach (Diagnostic diagnostic in request.Context.Diagnostics)
            {
                if (
                    !diagnostic.Code.HasValue ||
                    !diagnostic.Code.Value.IsString ||
                    string.IsNullOrEmpty(diagnostic.Code?.String))
                {
                    continue;
                }

                if (string.Equals(diagnostic.Source, "PSScriptAnalyzer", StringComparison.OrdinalIgnoreCase) &&
                    !ruleNamesProcessed.Contains(diagnostic.Code?.String))
                {
                    _ = ruleNamesProcessed.Add(diagnostic.Code?.String);
                    string title = $"Show documentation for: {diagnostic.Code?.String}";
                    codeActions.Add(new CodeAction
                    {
                        Title = title,
                        // This doesn't fix anything, but I'm adding it here so that it shows up in VS Code's
                        // Quick fix UI. The VS Code team is working on a way to support documentation CodeAction's better
                        // but this is good for now until that's ready.
                        Kind    = CodeActionKind.QuickFix,
                        Command = new Command
                        {
                            Title     = title,
                            Name      = "PowerShell.ShowCodeActionDocumentation",
                            Arguments = Newtonsoft.Json.Linq.JArray.FromObject(new[] { diagnostic.Code?.String })
                        }
                    });
                }
            }

            return(codeActions);
        }
 private List <SymbolReference> FindSymbolsInFile(ScriptRegion scriptRegion)
 {
     return
         (this.symbolsService.FindSymbolsInFile(
              GetScriptFile(scriptRegion)));
 }