Skip formatting if the language flavor shows this is not an MSSQL doc (#445)

This commit is contained in:
Kevin Cunnane
2017-08-28 17:38:14 -07:00
committed by GitHub
parent 5ab995d78f
commit 774a777db2
4 changed files with 104 additions and 5 deletions

View File

@@ -53,6 +53,13 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter
get { return ServiceProvider.GetService<WorkspaceService<SqlToolsSettings>>(); }
}
/// <summary>
/// Gets the language service. Note: should handle case where this is null in cases where unit tests do not set this up
/// </summary>
private LanguageService LanguageService
{
get { return ServiceProvider.GetService<LanguageService>(); }
}
/// <summary>
/// Ensure formatter settings are always up to date
@@ -105,6 +112,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter
{
return await Task.Factory.StartNew(() =>
{
if (ShouldSkipFormatting(docFormatParams))
{
return Array.Empty<TextEdit>();
}
var range = docFormatParams.Range;
ScriptFile scriptFile = GetFile(docFormatParams);
if (scriptFile == null)
@@ -117,10 +129,26 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter
});
}
private async Task<TextEdit[]> FormatAndReturnEdits(DocumentFormattingParams docFormatParams)
private bool ShouldSkipFormatting(DocumentFormattingParams docFormatParams)
{
if (docFormatParams == null
|| docFormatParams.TextDocument == null
|| docFormatParams.TextDocument.Uri == null)
{
return true;
}
return (LanguageService != null && LanguageService.ShouldSkipNonMssqlFile(docFormatParams.TextDocument.Uri));
}
private async Task<TextEdit[]> FormatAndReturnEdits(DocumentFormattingParams docFormatParams)
{
return await Task.Factory.StartNew(() =>
{
if (ShouldSkipFormatting(docFormatParams))
{
return Array.Empty<TextEdit>();
}
var scriptFile = GetFile(docFormatParams);
if (scriptFile == null
|| scriptFile.FileLines.Count == 0)

View File

@@ -36,7 +36,7 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
/// Main class for Language Service functionality including anything that requires knowledge of
/// the language to perform, such as definitions, intellisense, etc.
/// </summary>
public sealed class LanguageService: IDisposable
public class LanguageService: IDisposable
{
#region Singleton Instance Implementation
@@ -960,7 +960,11 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices
return ShouldSkipNonMssqlFile(scriptFile.ClientFilePath);
}
private bool ShouldSkipNonMssqlFile(string uri)
/// <summary>
/// Checks if a given URI is not an MSSQL file. Only files explicitly excluded by a language flavor change
/// notification will be treated as skippable
/// </summary>
public virtual bool ShouldSkipNonMssqlFile(string uri)
{
bool isNonMssql = false;
nonMssqlUriMap.TryGetValue(uri, out isNonMssql);