get code fixes at position
This commit is contained in:
@@ -35,13 +35,7 @@ public partial class IdeRoot : Control
|
||||
RoslynAnalysis.StartSolutionAnalysis(path);
|
||||
var infraProject = solutionModel.AllProjects.Single(s => s.Name == "Infrastructure");
|
||||
var diFile = infraProject.Files.Single(s => s.Name == "DependencyInjection.cs");
|
||||
var fileContents = await File.ReadAllTextAsync(diFile.Path);
|
||||
_sharpIdeCodeEdit.SetText(fileContents);
|
||||
var syntaxHighlighting = await RoslynAnalysis.GetDocumentSyntaxHighlighting(diFile);
|
||||
_sharpIdeCodeEdit.ProvideSyntaxHighlighting(syntaxHighlighting);
|
||||
var diagnostics = await RoslynAnalysis.GetDocumentDiagnostics(diFile);
|
||||
_sharpIdeCodeEdit.ProvideDiagnostics(diagnostics);
|
||||
|
||||
await _sharpIdeCodeEdit.SetSharpIdeFile(diFile);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Godot;
|
||||
using Microsoft.Build.Utilities;
|
||||
@@ -8,6 +9,7 @@ using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Classification;
|
||||
using Microsoft.CodeAnalysis.Text;
|
||||
using SharpIDE.Application.Features.Analysis;
|
||||
using SharpIDE.Application.Features.SolutionDiscovery;
|
||||
using Task = System.Threading.Tasks.Task;
|
||||
|
||||
namespace SharpIDE.Godot;
|
||||
@@ -21,6 +23,8 @@ public partial class SharpIdeCodeEdit : CodeEdit
|
||||
private int _selectionStartCol;
|
||||
private int _selectionEndCol;
|
||||
|
||||
private SharpIdeFile _currentFile = null!;
|
||||
|
||||
private CustomHighlighter _syntaxHighlighter = new();
|
||||
private PopupMenu _popupMenu = null!;
|
||||
|
||||
@@ -44,6 +48,17 @@ public partial class SharpIdeCodeEdit : CodeEdit
|
||||
};
|
||||
this.SyntaxHighlighter = _syntaxHighlighter;
|
||||
}
|
||||
|
||||
public async Task SetSharpIdeFile(SharpIdeFile file)
|
||||
{
|
||||
_currentFile = file;
|
||||
var fileContents = await File.ReadAllTextAsync(_currentFile.Path);
|
||||
SetText(fileContents);
|
||||
var syntaxHighlighting = await RoslynAnalysis.GetDocumentSyntaxHighlighting(_currentFile);
|
||||
SetSyntaxHighlightingModel(syntaxHighlighting);
|
||||
var diagnostics = await RoslynAnalysis.GetDocumentDiagnostics(_currentFile);
|
||||
SetDiagnosticsModel(diagnostics);
|
||||
}
|
||||
|
||||
public void UnderlineRange(int line, int caretStartCol, int caretEndCol, Color color, float thickness = 1.5f)
|
||||
{
|
||||
@@ -104,11 +119,12 @@ public partial class SharpIdeCodeEdit : CodeEdit
|
||||
}
|
||||
}
|
||||
|
||||
public void ProvideDiagnostics(ImmutableArray<(FileLinePositionSpan fileSpan, Diagnostic diagnostic)> diagnostics)
|
||||
private void SetDiagnosticsModel(ImmutableArray<(FileLinePositionSpan fileSpan, Diagnostic diagnostic)> diagnostics)
|
||||
{
|
||||
_diagnostics = diagnostics;
|
||||
}
|
||||
public void ProvideSyntaxHighlighting(IEnumerable<(FileLinePositionSpan fileSpan, ClassifiedSpan classifiedSpan)> classifiedSpans)
|
||||
|
||||
private void SetSyntaxHighlightingModel(IEnumerable<(FileLinePositionSpan fileSpan, ClassifiedSpan classifiedSpan)> classifiedSpans)
|
||||
{
|
||||
_syntaxHighlighter.ClassifiedSpans = classifiedSpans;
|
||||
Callable.From(() =>
|
||||
@@ -135,14 +151,14 @@ public partial class SharpIdeCodeEdit : CodeEdit
|
||||
try
|
||||
{
|
||||
var linePos = new LinePosition(caretLine, caretColumn);
|
||||
var diagnostic = _diagnostics.FirstOrDefault(d =>
|
||||
d.fileSpan.StartLinePosition <= linePos && d.fileSpan.EndLinePosition >= linePos);
|
||||
if (diagnostic is (_, null)) return;
|
||||
var codeActions = await RoslynAnalysis.GetCodeFixesAsync(diagnostic.diagnostic);
|
||||
// var diagnostic = _diagnostics.FirstOrDefault(d =>
|
||||
// d.fileSpan.StartLinePosition <= linePos && d.fileSpan.EndLinePosition >= linePos);
|
||||
// if (diagnostic is (_, null)) return;
|
||||
var codeActions = await RoslynAnalysis.GetCodeFixesForDocumentAtPosition(_currentFile, linePos);
|
||||
Callable.From(() =>
|
||||
{
|
||||
_popupMenu.Clear();
|
||||
foreach (var (index, (fileSpan, codeAction)) in codeActions.Index())
|
||||
foreach (var (index, codeAction) in codeActions.Index())
|
||||
{
|
||||
_popupMenu.AddItem(codeAction.Title, index);
|
||||
//_popupMenu.SetItemMetadata(menuItem, codeAction);
|
||||
|
||||
Reference in New Issue
Block a user