示例#1
0
        private void _LoadIssuesFromFile(string csvFile)
        {
            using (var file = new Godot.File())
            {
                try
                {
                    Error openError = file.Open(csvFile, Godot.File.ModeFlags.Read);

                    if (openError != Error.Ok)
                    {
                        return;
                    }

                    while (!file.EofReached())
                    {
                        string[] csvColumns = file.GetCsvLine();

                        if (csvColumns.Length == 1 && csvColumns[0].Empty())
                        {
                            return;
                        }

                        if (csvColumns.Length != 7)
                        {
                            GD.PushError($"Expected 7 columns, got {csvColumns.Length}");
                            continue;
                        }

                        var issue = new BuildIssue
                        {
                            Warning     = csvColumns[0] == "warning",
                            File        = csvColumns[1],
                            Line        = int.Parse(csvColumns[2]),
                            Column      = int.Parse(csvColumns[3]),
                            Code        = csvColumns[4],
                            Message     = csvColumns[5],
                            ProjectFile = csvColumns[6]
                        };

                        if (issue.Warning)
                        {
                            WarningCount += 1;
                        }
                        else
                        {
                            ErrorCount += 1;
                        }

                        issues.Add(issue);
                    }
                }
                finally
                {
                    file.Close(); // Disposing it is not enough. We need to call Close()
                }
            }
        }
示例#2
0
        public void UpdateIssuesList()
        {
            issuesList.Clear();

            using (var warningIcon = GetIcon("Warning", "EditorIcons"))
                using (var errorIcon = GetIcon("Error", "EditorIcons"))
                {
                    for (int i = 0; i < issues.Count; i++)
                    {
                        BuildIssue issue = issues[i];

                        if (!(issue.Warning ? WarningsVisible : ErrorsVisible))
                        {
                            continue;
                        }

                        string tooltip = string.Empty;
                        tooltip += $"Message: {issue.Message}";

                        if (!issue.Code.Empty())
                        {
                            tooltip += $"\nCode: {issue.Code}";
                        }

                        tooltip += $"\nType: {(issue.Warning ? "warning" : "error")}";

                        string text = string.Empty;

                        if (!issue.File.Empty())
                        {
                            text += $"{issue.File}({issue.Line},{issue.Column}): ";

                            tooltip += $"\nFile: {issue.File}";
                            tooltip += $"\nLine: {issue.Line}";
                            tooltip += $"\nColumn: {issue.Column}";
                        }

                        if (!issue.ProjectFile.Empty())
                        {
                            tooltip += $"\nProject: {issue.ProjectFile}";
                        }

                        text += issue.Message;

                        int    lineBreakIdx = text.IndexOf("\n", StringComparison.Ordinal);
                        string itemText     = lineBreakIdx == -1 ? text : text.Substring(0, lineBreakIdx);
                        issuesList.AddItem(itemText, issue.Warning ? warningIcon : errorIcon);

                        int index = issuesList.GetItemCount() - 1;
                        issuesList.SetItemTooltip(index, tooltip);
                        issuesList.SetItemMetadata(index, i);
                    }
                }
        }
示例#3
0
        public void OnBuildExecFailed(string cause)
        {
            BuildExited = true;
            BuildResult = BuildResults.Error;

            issuesList.Clear();

            var issue = new BuildIssue {
                Message = cause, Warning = false
            };

            ErrorCount += 1;
            issues.Add(issue);

            UpdateIssuesList();

            GodotSharpEditor.Instance.BottomPanel.RaiseBuildTab(this);
        }
示例#4
0
        private void _IssueActivated(int idx)
        {
            if (idx < 0 || idx >= issuesList.GetItemCount())
            {
                throw new IndexOutOfRangeException("Item list index out of range");
            }

            // Get correct issue idx from issue list
            int issueIndex = (int)issuesList.GetItemMetadata(idx);

            if (idx < 0 || idx >= issues.Count)
            {
                throw new IndexOutOfRangeException("Issue index out of range");
            }

            BuildIssue issue = issues[issueIndex];

            if (issue.ProjectFile.Empty() && issue.File.Empty())
            {
                return;
            }

            string projectDir = issue.ProjectFile.Length > 0 ? issue.ProjectFile.GetBaseDir() : BuildInfo.Solution.GetBaseDir();

            string file = Path.Combine(projectDir.SimplifyGodotPath(), issue.File.SimplifyGodotPath());

            if (!File.Exists(file))
            {
                return;
            }

            file = ProjectSettings.LocalizePath(file);

            if (file.StartsWith("res://"))
            {
                var script = (Script)ResourceLoader.Load(file, typeHint: Internal.CSharpLanguageType);

                if (script != null && Internal.ScriptEditorEdit(script, issue.Line, issue.Column))
                {
                    Internal.EditorNodeShowScriptScreen();
                }
            }
        }