diff --git a/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs b/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs
index 305206e3..20075d0a 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs
@@ -181,7 +181,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
}
}
- private CancellationTokenSource existingRequestCancellation;
+ private CancellationTokenSource? existingRequestCancellation;
///
/// Gets or sets the current workspace service instance
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Workspace/Contracts/ScriptFile.cs b/src/Microsoft.SqlTools.ServiceLayer/Workspace/Contracts/ScriptFile.cs
index 41a8fced..9bdac401 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/Workspace/Contracts/ScriptFile.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/Workspace/Contracts/ScriptFile.cs
@@ -445,6 +445,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Workspace.Contracts
.ToList();
}
+ public override string ToString()
+ {
+ return $"ScriptFile:{this.FilePath}";
+ }
+
#endregion
}
}
diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/LanguageServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/LanguageServiceTests.cs
index f176a802..bb6b703c 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/LanguageServiceTests.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/LanguageServer/LanguageServiceTests.cs
@@ -97,7 +97,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
result.TextDocumentPosition.Position.Character = 7;
result.ScriptFile.Contents = "select ";
- var autoCompleteService = LanguageService.Instance;
+ var autoCompleteService = CreateLanguageService(result.ScriptFile);
var completions = autoCompleteService.GetCompletionItems(
result.TextDocumentPosition,
result.ScriptFile,
@@ -132,7 +132,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
result.ScriptFile = ScriptFileTests.GetTestScriptFile("select * f");
result.TextDocumentPosition.TextDocument.Uri = result.ScriptFile.FilePath;
- var autoCompleteService = LanguageService.Instance;
+ var autoCompleteService = CreateLanguageService(result.ScriptFile);
var requestContext = new Mock>();
requestContext.Setup(x => x.SendResult(It.IsAny()))
.Returns(Task.FromResult(true));
@@ -218,7 +218,6 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
/// provide signature help.
///
[Test]
- [Ignore("this test is not stable")]
public async Task GetSignatureHelpReturnsNotNullIfParseInfoInitialized()
{
// When we make a connection to a live database
@@ -242,7 +241,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
};
// If the SQL has already been parsed
- var service = LanguageService.Instance;
+ var service = CreateLanguageService(result.ScriptFile);
await service.UpdateLanguageServiceOnConnection(result.ConnectionInfo);
Thread.Sleep(2000);
@@ -284,11 +283,13 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
public async Task RebuildIntellisenseCacheClearsScriptParseInfoCorrectly()
{
var testDb = SqlTestDb.CreateNew(TestServerType.OnPrem, false, null, null, "LangSvcTest");
+ LiveConnectionHelper.TestConnectionResult? connectionInfoResult = null;
try
{
- var connectionInfoResult = LiveConnectionHelper.InitLiveConnectionInfo(testDb.DatabaseName);
+ connectionInfoResult = LiveConnectionHelper.InitLiveConnectionInfo(testDb.DatabaseName);
+
+ var langService = CreateLanguageService(connectionInfoResult.ScriptFile);
- var langService = LanguageService.Instance;
await langService.UpdateLanguageServiceOnConnection(connectionInfoResult.ConnectionInfo);
var queryText = "SELECT * FROM dbo.";
connectionInfoResult.ScriptFile.SetFileContents(queryText);
@@ -352,12 +353,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
scriptFile.SetFileContents("koko wants a bananas");
File.WriteAllText(scriptFile.ClientUri, scriptFile.Contents);
- // Create a workspace and add file to it so that its found for intellense building
- var workspace = new ServiceLayer.Workspace.Workspace();
- var workspaceService = new WorkspaceService { Workspace = workspace };
- var langService = new LanguageService() { WorkspaceServiceInstance = workspaceService };
- langService.CurrentWorkspace.GetFile(scriptFile.ClientUri);
- langService.CurrentWorkspaceSettings.SqlTools.IntelliSense.EnableIntellisense = true;
+ var langService = CreateLanguageService(scriptFile);
// Add a connection to ensure the intellisense building works
ConnectionInfo connectionInfo = GetLiveAutoCompleteTestObjects().ConnectionInfo;
@@ -427,7 +423,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
{
var connectionInfoResult = LiveConnectionHelper.InitLiveConnectionInfo(testDb.DatabaseName);
- var langService = LanguageService.Instance;
+ var langService = CreateLanguageService(connectionInfoResult.ScriptFile);
await langService.UpdateLanguageServiceOnConnection(connectionInfoResult.ConnectionInfo);
connectionInfoResult.ScriptFile.SetFileContents(sqlStarQuery);
@@ -465,5 +461,24 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.LanguageServer
testDb.Cleanup();
}
}
+
+ ///
+ /// Creates a new language service and sets it up with an initial script file.
+ ///
+ /// The initial script file to initialize in the workspace
+ ///
+ private LanguageService CreateLanguageService(ScriptFile scriptFile)
+ {
+ var langService = new LanguageService()
+ {
+ WorkspaceServiceInstance = new WorkspaceService()
+ {
+ Workspace = new ServiceLayer.Workspace.Workspace()
+ }
+ };
+ langService.CurrentWorkspace.GetFile(scriptFile.ClientUri);
+ langService.CurrentWorkspaceSettings.SqlTools.IntelliSense.EnableIntellisense = true;
+ return langService;
+ }
}
}