OmniSharp / omnisharp-roslyn

OmniSharp server (HTTP, STDIO) based on Roslyn workspaces
MIT License
1.78k stars 420 forks source link

(neovim) when an EditorConfig file is used, code refactorings fail with `NotSupportedException` #2510

Open nicolaiarocci opened 1 year ago

nicolaiarocci commented 1 year ago

I got neovim working just fine with omnisharp-roslyn and the companion omnisharp-vim plugin; code refactorings & analysis function as expected.

Howewer, if I add a .editorconfig file to the project, while the rules are respected in code analysis, all code refactorings fail silently. A look at the logs shows that NotSupportedException exceptions are raised:

[ERROR][2023-03-01 17:33:53] ...lsp/handlers.lua:533    "OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.GetCodeActionsService: Error computing refactorings for Microsoft.CodeAnalysis.IntroduceVariable.IntroduceVariableCodeRefactoringProvider - System.NotSupportedException: Specified method is not supported.\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.ParseNamespaceDeclaration(String optionString, CodeStyleOption2`1 default)\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.<>c__DisplayClass65_0.<CreateNamespaceDeclarationOption>b__0(String s)\n   at Microsoft.CodeAnalysis.Options.EditorConfigStorageLocation`1.TryGetOption(String value, Type type, T& result)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.TryGetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, Optional`1 defaultValue, T& value)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.GetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, T defaultValue)\n   at Microsoft.CodeAnalysis.CSharp.Formatting.CSharpSyntaxFormattingOptionsProviders.GetCSharpSyntaxFormattingOptions(AnalyzerConfigOptions options, CSharpSyntaxFormattingOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.Formatting.SyntaxFormattingOptionsProviders.GetSyntaxFormattingOptions(AnalyzerConfigOptions options, SyntaxFormattingOptions fallbackOptions, LanguageServices languageServices)\n   at Microsoft.CodeAnalysis.CodeCleanup.CodeCleanupOptionsProviders.GetCodeCleanupOptions(AnalyzerConfigOptions options, Boolean allowImportsInHiddenRegions, CodeCleanupOptions fallbackOptions, LanguageServices languageServices)\n   at Microsoft.CodeAnalysis.CodeCleanup.CodeCleanupOptionsProviders.GetCodeCleanupOptionsAsync(Document document, CodeCleanupOptions fallbackOptions, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeCleanup.CodeCleanupOptionsProviders.GetCodeCleanupOptionsAsync(Document document, CodeCleanupOptionsProvider fallbackOptionsProvider, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.IntroduceVariable.IntroduceVariableCodeRefactoringProvider.ComputeRefactoringsAsync(CodeRefactoringContext context)\n   at OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.BaseCodeActionService`2.CollectRefactoringActions(Document document, TextSpan span, List`1 codeActions) in /Users/runner/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Refactoring/V2/BaseCodeActionService.cs:line 217 | "
[ERROR][2023-03-01 17:33:53] ...lsp/handlers.lua:533    "OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.GetCodeActionsService: Error computing refactorings for Microsoft.CodeAnalysis.CSharp.Wrapping.CSharpWrappingCodeRefactoringProvider - System.NotSupportedException: Specified method is not supported.\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.ParseNamespaceDeclaration(String optionString, CodeStyleOption2`1 default)\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.<>c__DisplayClass65_0.<CreateNamespaceDeclarationOption>b__0(String s)\n   at Microsoft.CodeAnalysis.Options.EditorConfigStorageLocation`1.TryGetOption(String value, Type type, T& result)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.TryGetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, Optional`1 defaultValue, T& value)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.GetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, T defaultValue)\n   at Microsoft.CodeAnalysis.CSharp.Formatting.CSharpSyntaxFormattingOptionsProviders.GetCSharpSyntaxFormattingOptions(AnalyzerConfigOptions options, CSharpSyntaxFormattingOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CSharp.Wrapping.CSharpSyntaxWrappingOptionsProviders.GetCSharpSyntaxWrappingOptions(AnalyzerConfigOptions options, CodeActionOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CSharp.Wrapping.CSharpWrappingCodeRefactoringProvider.GetWrappingOptions(AnalyzerConfigOptions options, CodeActionOptions ideOptions)\n   at Microsoft.CodeAnalysis.Wrapping.AbstractWrappingCodeRefactoringProvider.ComputeRefactoringsAsync(CodeRefactoringContext context)\n   at OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.BaseCodeActionService`2.CollectRefactoringActions(Document document, TextSpan span, List`1 codeActions) in /Users/runner/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Refactoring/V2/BaseCodeActionService.cs:line 217 | "
[ERROR][2023-03-01 17:33:53] ...lsp/handlers.lua:533    "OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.GetCodeActionsService: Error computing refactorings for Microsoft.CodeAnalysis.CSharp.UseExpressionBody.UseExpressionBodyCodeRefactoringProvider - System.NotSupportedException: Specified method is not supported.\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.ParseNamespaceDeclaration(String optionString, CodeStyleOption2`1 default)\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.<>c__DisplayClass65_0.<CreateNamespaceDeclarationOption>b__0(String s)\n   at Microsoft.CodeAnalysis.Options.EditorConfigStorageLocation`1.TryGetOption(String value, Type type, T& result)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.TryGetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, Optional`1 defaultValue, T& value)\n   at Microsoft.CodeAnalysis.CSharp.CodeGeneration.CSharpCodeGenerationOptionsProviders.GetCSharpCodeGenerationOptions(AnalyzerConfigOptions options, CSharpCodeGenerationOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CSharp.CodeGeneration.CSharpCodeGenerationService.GetCodeGenerationOptions(AnalyzerConfigOptions options, CodeGenerationOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptionsProviders.GetCodeGenerationOptions(AnalyzerConfigOptions options, CodeGenerationOptions fallbackOptions, LanguageServices languageServices)\n   at Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptionsProviders.GetCodeGenerationOptionsAsync(Document document, CodeGenerationOptions fallbackOptions, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptionsProviders.GetCodeGenerationOptionsAsync(Document document, CodeGenerationOptionsProvider fallbackOptionsProvider, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CSharp.UseExpressionBody.UseExpressionBodyCodeRefactoringProvider.ComputeRefactoringsAsync(CodeRefactoringContext context)\n   at OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.BaseCodeActionService`2.CollectRefactoringActions(Document document, TextSpan span, List`1 codeActions) in /Users/runner/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Refactoring/V2/BaseCodeActionService.cs:line 217 | "
[ERROR][2023-03-01 17:33:55] ...lsp/handlers.lua:533    "OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.RunCodeActionService: Error computing refactorings for Microsoft.CodeAnalysis.IntroduceVariable.IntroduceVariableCodeRefactoringProvider - System.NotSupportedException: Specified method is not supported.\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.ParseNamespaceDeclaration(String optionString, CodeStyleOption2`1 default)\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.<>c__DisplayClass65_0.<CreateNamespaceDeclarationOption>b__0(String s)\n   at Microsoft.CodeAnalysis.Options.EditorConfigStorageLocation`1.TryGetOption(String value, Type type, T& result)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.TryGetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, Optional`1 defaultValue, T& value)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.GetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, T defaultValue)\n   at Microsoft.CodeAnalysis.CSharp.Formatting.CSharpSyntaxFormattingOptionsProviders.GetCSharpSyntaxFormattingOptions(AnalyzerConfigOptions options, CSharpSyntaxFormattingOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.Formatting.SyntaxFormattingOptionsProviders.GetSyntaxFormattingOptions(AnalyzerConfigOptions options, SyntaxFormattingOptions fallbackOptions, LanguageServices languageServices)\n   at Microsoft.CodeAnalysis.CodeCleanup.CodeCleanupOptionsProviders.GetCodeCleanupOptions(AnalyzerConfigOptions options, Boolean allowImportsInHiddenRegions, CodeCleanupOptions fallbackOptions, LanguageServices languageServices)\n   at Microsoft.CodeAnalysis.CodeCleanup.CodeCleanupOptionsProviders.GetCodeCleanupOptionsAsync(Document document, CodeCleanupOptions fallbackOptions, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeCleanup.CodeCleanupOptionsProviders.GetCodeCleanupOptionsAsync(Document document, CodeCleanupOptionsProvider fallbackOptionsProvider, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.IntroduceVariable.IntroduceVariableCodeRefactoringProvider.ComputeRefactoringsAsync(CodeRefactoringContext context)\n   at OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.BaseCodeActionService`2.CollectRefactoringActions(Document document, TextSpan span, List`1 codeActions) in /Users/runner/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Refactoring/V2/BaseCodeActionService.cs:line 217 | "
[ERROR][2023-03-01 17:33:55] ...lsp/handlers.lua:533    "OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.RunCodeActionService: Error computing refactorings for Microsoft.CodeAnalysis.CSharp.Wrapping.CSharpWrappingCodeRefactoringProvider - System.NotSupportedException: Specified method is not supported.\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.ParseNamespaceDeclaration(String optionString, CodeStyleOption2`1 default)\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.<>c__DisplayClass65_0.<CreateNamespaceDeclarationOption>b__0(String s)\n   at Microsoft.CodeAnalysis.Options.EditorConfigStorageLocation`1.TryGetOption(String value, Type type, T& result)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.TryGetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, Optional`1 defaultValue, T& value)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.GetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, T defaultValue)\n   at Microsoft.CodeAnalysis.CSharp.Formatting.CSharpSyntaxFormattingOptionsProviders.GetCSharpSyntaxFormattingOptions(AnalyzerConfigOptions options, CSharpSyntaxFormattingOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CSharp.Wrapping.CSharpSyntaxWrappingOptionsProviders.GetCSharpSyntaxWrappingOptions(AnalyzerConfigOptions options, CodeActionOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CSharp.Wrapping.CSharpWrappingCodeRefactoringProvider.GetWrappingOptions(AnalyzerConfigOptions options, CodeActionOptions ideOptions)\n   at Microsoft.CodeAnalysis.Wrapping.AbstractWrappingCodeRefactoringProvider.ComputeRefactoringsAsync(CodeRefactoringContext context)\n   at OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.BaseCodeActionService`2.CollectRefactoringActions(Document document, TextSpan span, List`1 codeActions) in /Users/runner/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Refactoring/V2/BaseCodeActionService.cs:line 217 | "
[ERROR][2023-03-01 17:33:55] ...lsp/handlers.lua:533    "OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.RunCodeActionService: Error computing refactorings for Microsoft.CodeAnalysis.CSharp.UseExpressionBody.UseExpressionBodyCodeRefactoringProvider - System.NotSupportedException: Specified method is not supported.\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.ParseNamespaceDeclaration(String optionString, CodeStyleOption2`1 default)\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.<>c__DisplayClass65_0.<CreateNamespaceDeclarationOption>b__0(String s)\n   at Microsoft.CodeAnalysis.Options.EditorConfigStorageLocation`1.TryGetOption(String value, Type type, T& result)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.TryGetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, Optional`1 defaultValue, T& value)\n   at Microsoft.CodeAnalysis.CSharp.CodeGeneration.CSharpCodeGenerationOptionsProviders.GetCSharpCodeGenerationOptions(AnalyzerConfigOptions options, CSharpCodeGenerationOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CSharp.CodeGeneration.CSharpCodeGenerationService.GetCodeGenerationOptions(AnalyzerConfigOptions options, CodeGenerationOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptionsProviders.GetCodeGenerationOptions(AnalyzerConfigOptions options, CodeGenerationOptions fallbackOptions, LanguageServices languageServices)\n   at Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptionsProviders.GetCodeGenerationOptionsAsync(Document document, CodeGenerationOptions fallbackOptions, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptionsProviders.GetCodeGenerationOptionsAsync(Document document, CodeGenerationOptionsProvider fallbackOptionsProvider, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CSharp.UseExpressionBody.UseExpressionBodyCodeRefactoringProvider.ComputeRefactoringsAsync(CodeRefactoringContext context)\n   at OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.BaseCodeActionService`2.CollectRefactoringActions(Document document, TextSpan span, List`1 codeActions) in /Users/runner/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Refactoring/V2/BaseCodeActionService.cs:line 217 | "
[ERROR][2023-03-01 17:33:55] ...lsp/handlers.lua:533    "OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.RunCodeActionService: An error occurred when running a code action: Remove redundant assignment - System.NotSupportedException: Specified method is not supported.\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.ParseNamespaceDeclaration(String optionString, CodeStyleOption2`1 default)\n   at Microsoft.CodeAnalysis.CSharp.CodeStyle.CSharpCodeStyleOptions.<>c__DisplayClass65_0.<CreateNamespaceDeclarationOption>b__0(String s)\n   at Microsoft.CodeAnalysis.Options.EditorConfigStorageLocation`1.TryGetOption(String value, Type type, T& result)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.TryGetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, Optional`1 defaultValue, T& value)\n   at Microsoft.CodeAnalysis.AnalyzerConfigOptionsExtensions.GetEditorConfigOption[T](AnalyzerConfigOptions analyzerConfigOptions, IOption option, T defaultValue)\n   at Microsoft.CodeAnalysis.CSharp.Formatting.CSharpSyntaxFormattingOptionsProviders.GetCSharpSyntaxFormattingOptions(AnalyzerConfigOptions options, CSharpSyntaxFormattingOptions fallbackOptions)\n   at Microsoft.CodeAnalysis.CodeActions.CodeFixOptionsProvider.GetFormattingOptions(ISyntaxFormatting formatting)\n   at Microsoft.CodeAnalysis.RemoveUnusedParametersAndValues.AbstractRemoveUnusedValuesCodeFixProvider`11.FixAllAsync(Document document, ImmutableArray`1 diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeFixes.SyntaxEditorBasedCodeFixProvider.FixAllWithEditorAsync(Document document, Func`2 editAsync, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeActions.CodeAction.GetChangedSolutionAsync(CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeActions.CodeAction.ComputeOperationsAsync(CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeActions.CodeAction.ComputeOperationsAsync(IProgressTracker progressTracker, CancellationToken cancellationToken)\n   at Microsoft.CodeAnalysis.CodeActions.CodeAction.GetOperationsCoreAsync(IProgressTracker progressTracker, CancellationToken cancellationToken)\n   at OmniSharp.Roslyn.CSharp.Services.Refactoring.V2.RunCodeActionService.Handle(RunCodeActionRequest request) in /Users/runner/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Refactoring/V2/RunCodeActionService.cs:line 59 | "

The same happens with the omnisharp-vim plugin disabled. Removing the .editorconfig file (and relaunching the editor) will reactivate refactorings.

$ nvim --version
NVIM v0.9.0-dev-1046+g5732aa706-dirty
Build type: Release
LuaJIT 2.1.0-beta3

$ dotnet --version
7.0.101

EDIT: I should probably mention that I am also suffering from #2483 (and have the suggested workaround in place).

nickspoons commented 1 year ago

I suspect omnisharp-vim is a red herring here. If you are using neovim LSP, then neovim and omnisharp are each starting their own versions of the omnisharp-roslyn server - one in lsp mode and one in the older stdio mode. The omnisharp-vim log can be seen with :OmniSharpOpenLog.

nicolaiarocci commented 1 year ago

@nickspoons thanks for the feedback. :OmniSharpOpenLog shows that the omnisharp-roslyn server is running in stdio mode. As mentioned I get the weird editorconfig behavior even if omnisharp-vim is disabled (same errors in the log).