diff --git a/src/SLCore.UnitTests/Service/Branch/DidVcsRepositoryChangeParamsTests.cs b/src/SLCore.UnitTests/Service/Branch/DidVcsRepositoryChangeParamsTests.cs new file mode 100644 index 000000000..c6ea0087d --- /dev/null +++ b/src/SLCore.UnitTests/Service/Branch/DidVcsRepositoryChangeParamsTests.cs @@ -0,0 +1,44 @@ +/* + * SonarLint for Visual Studio + * Copyright (C) 2016-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +using Newtonsoft.Json; +using SonarLint.VisualStudio.SLCore.Service.Branch; + +namespace SonarLint.VisualStudio.SLCore.UnitTests.Service.Branch; + +[TestClass] +public class DidVcsRepositoryChangeParamsTests +{ + [TestMethod] + public void Serialize_AsExpected() + { + var testSubject = new DidVcsRepositoryChangeParams("CONFIG_SCOPE_ID"); + + const string expectedString = """ + { + "configurationScopeId": "CONFIG_SCOPE_ID" + } + """; + + var serializedString = JsonConvert.SerializeObject(testSubject, Formatting.Indented); + + serializedString.Should().Be(expectedString); + } +} diff --git a/src/SLCore.UnitTests/Service/Branch/GetMatchedSonarProjectBranchParamsTests.cs b/src/SLCore.UnitTests/Service/Branch/GetMatchedSonarProjectBranchParamsTests.cs new file mode 100644 index 000000000..557dd43ab --- /dev/null +++ b/src/SLCore.UnitTests/Service/Branch/GetMatchedSonarProjectBranchParamsTests.cs @@ -0,0 +1,44 @@ +/* + * SonarLint for Visual Studio + * Copyright (C) 2016-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +using Newtonsoft.Json; +using SonarLint.VisualStudio.SLCore.Service.Branch; + +namespace SonarLint.VisualStudio.SLCore.UnitTests.Service.Branch; + +[TestClass] +public class GetMatchedSonarProjectBranchParamsTests +{ + [TestMethod] + public void Serialize_AsExpected() + { + var testSubject = new GetMatchedSonarProjectBranchParams("CONFIG_SCOPE_ID"); + + const string expectedString = """ + { + "configurationScopeId": "CONFIG_SCOPE_ID" + } + """; + + var serializedString = JsonConvert.SerializeObject(testSubject, Formatting.Indented); + + serializedString.Should().Be(expectedString); + } +} diff --git a/src/SLCore.UnitTests/Service/Branch/GetMatchedSonarProjectBranchResponseTests.cs b/src/SLCore.UnitTests/Service/Branch/GetMatchedSonarProjectBranchResponseTests.cs new file mode 100644 index 000000000..dfa467196 --- /dev/null +++ b/src/SLCore.UnitTests/Service/Branch/GetMatchedSonarProjectBranchResponseTests.cs @@ -0,0 +1,42 @@ +/* + * SonarLint for Visual Studio + * Copyright (C) 2016-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +using Newtonsoft.Json; +using SonarLint.VisualStudio.SLCore.Service.Branch; + +namespace SonarLint.VisualStudio.SLCore.UnitTests.Service.Branch; + +[TestClass] +public class GetMatchedSonarProjectBranchResponseTests +{ + [TestMethod] + public void Deserialized_AsExpected_SmokeTest() + { + const string serialized = """ + { + "matchedSonarProjectBranch": "the-branch" + } + """; + + var actual = JsonConvert.DeserializeObject(serialized); + + actual.matchedSonarProjectBranch.Should().Be("the-branch"); + } +} diff --git a/src/SLCore/Service/Branch/DidVcsRepositoryChangeParams.cs b/src/SLCore/Service/Branch/DidVcsRepositoryChangeParams.cs new file mode 100644 index 000000000..feacf48ed --- /dev/null +++ b/src/SLCore/Service/Branch/DidVcsRepositoryChangeParams.cs @@ -0,0 +1,23 @@ +/* + * SonarLint for Visual Studio + * Copyright (C) 2016-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +namespace SonarLint.VisualStudio.SLCore.Service.Branch; + +public record DidVcsRepositoryChangeParams(string configurationScopeId); diff --git a/src/SLCore/Service/Branch/GetMatchedSonarProjectBranchParams.cs b/src/SLCore/Service/Branch/GetMatchedSonarProjectBranchParams.cs new file mode 100644 index 000000000..b2a523a13 --- /dev/null +++ b/src/SLCore/Service/Branch/GetMatchedSonarProjectBranchParams.cs @@ -0,0 +1,23 @@ +/* + * SonarLint for Visual Studio + * Copyright (C) 2016-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +namespace SonarLint.VisualStudio.SLCore.Service.Branch; + +public record GetMatchedSonarProjectBranchParams(string configurationScopeId); diff --git a/src/SLCore/Service/Branch/GetMatchedSonarProjectBranchResponse.cs b/src/SLCore/Service/Branch/GetMatchedSonarProjectBranchResponse.cs new file mode 100644 index 000000000..5309c0f71 --- /dev/null +++ b/src/SLCore/Service/Branch/GetMatchedSonarProjectBranchResponse.cs @@ -0,0 +1,23 @@ +/* + * SonarLint for Visual Studio + * Copyright (C) 2016-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +namespace SonarLint.VisualStudio.SLCore.Service.Branch; + +public record GetMatchedSonarProjectBranchResponse(string matchedSonarProjectBranch); diff --git a/src/SLCore/Service/Branch/ISonarProjectBranchSlCoreService.cs b/src/SLCore/Service/Branch/ISonarProjectBranchSlCoreService.cs new file mode 100644 index 000000000..b2cee7cf2 --- /dev/null +++ b/src/SLCore/Service/Branch/ISonarProjectBranchSlCoreService.cs @@ -0,0 +1,38 @@ +/* + * SonarLint for Visual Studio + * Copyright (C) 2016-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +using SonarLint.VisualStudio.SLCore.Protocol; + +namespace SonarLint.VisualStudio.SLCore.Service.Branch; + +[JsonRpcClass("branch")] +public interface ISonarProjectBranchSlCoreService +{ + /// + /// Must be called when any change on the VCS might lead to a different sonar project branch being resolved (could be a different HEAD, a branch checkout). + /// + void DidVcsRepositoryChange(DidVcsRepositoryChangeParams parameters); + + /// + /// Returns the currently matched Sonar Project branch. + /// Might return a null value in if no matching happened. + /// + Task GetMatchedSonarProjectBranchAsync(GetMatchedSonarProjectBranchParams parameters); +}