From a6d7a025731d359cbd212c8533e0d02356da33c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Wed, 23 May 2018 22:49:48 +0300 Subject: [PATCH 1/6] Update Cake test assets depencencies --- test-assets/test-projects/CakeProject/tools/packages.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-assets/test-projects/CakeProject/tools/packages.config b/test-assets/test-projects/CakeProject/tools/packages.config index 6a10e66318..d86ba709fc 100644 --- a/test-assets/test-projects/CakeProject/tools/packages.config +++ b/test-assets/test-projects/CakeProject/tools/packages.config @@ -1,4 +1,4 @@ - - + + \ No newline at end of file From c3510b911d3179170008eab58c6440fb41dbb122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Wed, 23 May 2018 22:50:11 +0300 Subject: [PATCH 2/6] Adds failing test. --- test-assets/test-projects/CakeProject/error.cake | 3 +++ tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 test-assets/test-projects/CakeProject/error.cake diff --git a/test-assets/test-projects/CakeProject/error.cake b/test-assets/test-projects/CakeProject/error.cake new file mode 100644 index 0000000000..5c26b007c1 --- /dev/null +++ b/test-assets/test-projects/CakeProject/error.cake @@ -0,0 +1,3 @@ +class Foo { + public asdf MyProperty { get; set; } +} \ No newline at end of file diff --git a/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs b/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs index 79d28d7b66..1675a9c1ac 100644 --- a/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs +++ b/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs @@ -39,7 +39,18 @@ public async Task ShouldNotCallCodeCheckServiceIfRequestDoesNotSpecifyFileName() var diagnostics = await FindDiagnostics(input, includeFileName: false); Assert.Null(diagnostics); } - + + [Fact] + public async Task ShouldNotIncludeDiagnosticsFromLoadedFilesIfFileNameIsSpecified() + { + const string input = @" +#load error.cake +var target = Argument(""target"", ""Default"");"; + + var diagnostics = await FindDiagnostics(input, includeFileName: true); + Assert.Null(diagnostics); + } + private async Task FindDiagnostics(string contents, bool includeFileName) { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy : false)) From 417ac96bd20576b78783df723e0d7f33a9d8c31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Wed, 23 May 2018 23:14:55 +0300 Subject: [PATCH 3/6] Only return diagnostics for the requested file. --- .../Diagnostics/CodeCheckHandler.cs | 34 ++++++++++++++++++- tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs | 2 +- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/OmniSharp.Cake/Services/RequestHandlers/Diagnostics/CodeCheckHandler.cs b/src/OmniSharp.Cake/Services/RequestHandlers/Diagnostics/CodeCheckHandler.cs index 930f36a6e3..c4988d72c1 100644 --- a/src/OmniSharp.Cake/Services/RequestHandlers/Diagnostics/CodeCheckHandler.cs +++ b/src/OmniSharp.Cake/Services/RequestHandlers/Diagnostics/CodeCheckHandler.cs @@ -1,8 +1,12 @@ -using System.Composition; +using System; +using System.Composition; +using System.IO; +using System.Linq; using System.Threading.Tasks; using OmniSharp.Mef; using OmniSharp.Models; using OmniSharp.Models.CodeCheck; +using OmniSharp.Utilities; namespace OmniSharp.Cake.Services.RequestHandlers.Diagnostics { @@ -18,5 +22,33 @@ public CodeCheckHandler( public override bool IsValid(CodeCheckRequest request) => !string.IsNullOrEmpty(request.FileName); + + protected override Task TranslateResponse(QuickFixResponse response, CodeCheckRequest request) + { + if (response?.QuickFixes == null) + { + return Task.FromResult(response); + } + + var quickFixes = response.QuickFixes.Where(x => PathsAreEqual(x.FileName, request.FileName)); + response.QuickFixes = quickFixes; + return Task.FromResult(response); + + bool PathsAreEqual(string x, string y) + { + if (x == null && y == null) + { + return true; + } + if (x == null || y == null) + { + return false; + } + + var comparer = PlatformHelper.IsWindows ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + + return Path.GetFullPath(x).Equals(Path.GetFullPath(y), comparer); + } + } } } diff --git a/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs b/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs index 1675a9c1ac..02cfc810b5 100644 --- a/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs +++ b/tests/OmniSharp.Cake.Tests/CodeCheckFacts.cs @@ -48,7 +48,7 @@ public async Task ShouldNotIncludeDiagnosticsFromLoadedFilesIfFileNameIsSpecifie var target = Argument(""target"", ""Default"");"; var diagnostics = await FindDiagnostics(input, includeFileName: true); - Assert.Null(diagnostics); + Assert.Empty(diagnostics.QuickFixes); } private async Task FindDiagnostics(string contents, bool includeFileName) From 15f0b6423734bd3571e8bf8d278d1649550a73bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Wed, 23 May 2018 23:19:20 +0300 Subject: [PATCH 4/6] Fix tests that was failing after additional test asset was added. --- tests/OmniSharp.Cake.Tests/CakeProjectSystemFacts.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/OmniSharp.Cake.Tests/CakeProjectSystemFacts.cs b/tests/OmniSharp.Cake.Tests/CakeProjectSystemFacts.cs index b322f1ed8c..aecf30e7b3 100644 --- a/tests/OmniSharp.Cake.Tests/CakeProjectSystemFacts.cs +++ b/tests/OmniSharp.Cake.Tests/CakeProjectSystemFacts.cs @@ -28,9 +28,10 @@ public async Task ShouldGetProjects() { var workspaceInfo = await GetWorkspaceInfoAsync(host); - Assert.Equal(2, workspaceInfo.Projects.Count()); + Assert.Equal(3, workspaceInfo.Projects.Count()); Assert.Contains("build.cake", workspaceInfo.Projects.Select(p => Path.GetFileName(p.Path))); Assert.Contains("foo.cake", workspaceInfo.Projects.Select(p => Path.GetFileName(p.Path))); + Assert.Contains("error.cake", workspaceInfo.Projects.Select(p => Path.GetFileName(p.Path))); } } @@ -43,16 +44,16 @@ public async Task ShouldAddAndRemoveProjects() var tempFile = Path.Combine(testProject.Directory, "temp.cake"); var workspaceInfo = await GetWorkspaceInfoAsync(host); - Assert.Equal(2, workspaceInfo.Projects.Count()); + Assert.Equal(3, workspaceInfo.Projects.Count()); await AddFile(host, tempFile); workspaceInfo = await GetWorkspaceInfoAsync(host); - Assert.Equal(3, workspaceInfo.Projects.Count()); + Assert.Equal(4, workspaceInfo.Projects.Count()); Assert.Contains("temp.cake", workspaceInfo.Projects.Select(p => Path.GetFileName(p.Path))); await RemoveFile(host, tempFile); workspaceInfo = await GetWorkspaceInfoAsync(host); - Assert.Equal(2, workspaceInfo.Projects.Count()); + Assert.Equal(3, workspaceInfo.Projects.Count()); Assert.DoesNotContain("temp.cake", workspaceInfo.Projects.Select(p => Path.GetFileName(p.Path))); } } From a857392b9934b4956ca83beb5fb1664a96b2ce04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Wed, 23 May 2018 23:25:52 +0300 Subject: [PATCH 5/6] Updated CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6282c7bcaa..e59da39cf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog All changes to the project will be documented in this file. +## [1.31.1] - _Not Yet Released_ +* Fixed bug where diagnostics from loaded `.cake` files was shown in the current file. (PR: [#1201](https://github.com/OmniSharp/omnisharp-roslyn/pull/1201)) + ## [1.31.0] - 2018-05-29 * Update to Roslyn 2.8.0 packages, adding support for C# 7.3. (PR: [#1182](https://github.com/OmniSharp/omnisharp-roslyn/pull/1182)) * MSBuild project system no longer stops when a project fails to load. (PR: [#1181](https://github.com/OmniSharp/omnisharp-roslyn/pull/1181)) From e740da6fd0b4c984b3b188ecb9c7bae034730d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Wed, 30 May 2018 22:28:14 +0300 Subject: [PATCH 6/6] Adjust path to find run script in embedded mono. --- src/OmniSharp.Cake/Services/MonoScriptGenerationProcess.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OmniSharp.Cake/Services/MonoScriptGenerationProcess.cs b/src/OmniSharp.Cake/Services/MonoScriptGenerationProcess.cs index 05d91ca76e..d6f62e91dc 100644 --- a/src/OmniSharp.Cake/Services/MonoScriptGenerationProcess.cs +++ b/src/OmniSharp.Cake/Services/MonoScriptGenerationProcess.cs @@ -95,7 +95,7 @@ public void Start(int port, string workingDirectory) process.WaitForExit(); // If OmniSharp bundled Mono runtime, use bootstrap script. - var script = Path.Combine(Path.GetDirectoryName(runtime), "run"); + var script = Path.Combine(Path.GetDirectoryName(runtime), "../run"); if (File.Exists(script)) { return (script, "--no-omnisharp ");