public async Task <ParserOutput> GetXamlAsync(IAsyncServiceProvider serviceProvider) { ParserOutput result = null; if (CodeParserBase.GetSettings().Profiles.Any()) { if (!(await serviceProvider.GetServiceAsync(typeof(EnvDTE.DTE)) is DTE dte)) { SharedRapidXamlPackage.Logger?.RecordError(StringRes.Error_FailedToGetDteInGetXamlAsync); } else { var activeDocument = dte.ActiveDocument; var textView = await GetTextViewAsync(serviceProvider); var selection = textView.Selection; bool isSelection = selection.Start.Position != selection.End.Position; var caretPosition = textView.Caret.Position.BufferPosition; var document = caretPosition.Snapshot.GetOpenDocumentInCurrentContextWithChanges(); var semanticModel = await document.GetSemanticModelAsync(); var vs = new VisualStudioAbstraction(this.Logger, this.AsyncPackage, dte); var xamlIndent = await vs.GetXamlIndentAsync(); var proj = dte.Solution.GetProjectContainingFile(document.FilePath); if (proj == null) { // Default to the "active project" if file is not part of a known project proj = ((Array)dte.ActiveSolutionProjects).GetValue(0) as Project; } var projType = vs.GetProjectType(proj); this.Logger?.RecordInfo(StringRes.Info_DetectedProjectType.WithParams(projType.GetDescription())); IDocumentParser parser = null; if (activeDocument.Language == "CSharp") { parser = new CSharpParser(this.Logger, projType, xamlIndent); } else if (activeDocument.Language == "Basic") { parser = new VisualBasicParser(this.Logger, projType, xamlIndent); } result = isSelection ? parser?.GetSelectionOutput(await document.GetSyntaxRootAsync(), semanticModel, selection.Start.Position, selection.End.Position) : parser?.GetSingleItemOutput(await document.GetSyntaxRootAsync(), semanticModel, caretPosition.Position); } }
public async Task <AnalyzerOutput> GetXamlAsync(IAsyncServiceProvider serviceProvider) { AnalyzerOutput result = null; if (AnalyzerBase.GetSettings().Profiles.Any()) { var dte = await serviceProvider.GetServiceAsync(typeof(EnvDTE.DTE)) as EnvDTE.DTE; var activeDocument = dte.ActiveDocument; var textView = await GetTextViewAsync(serviceProvider); var selection = textView.Selection; bool isSelection = selection.Start.Position != selection.End.Position; var caretPosition = textView.Caret.Position.BufferPosition; var document = caretPosition.Snapshot.GetOpenDocumentInCurrentContextWithChanges(); var semanticModel = await document.GetSemanticModelAsync(); var vs = new VisualStudioAbstraction(this.Logger, this.ServiceProvider, dte); var xamlIndent = await vs.GetXamlIndentAsync(); IDocumentAnalyzer analyzer = null; if (activeDocument.Language == "CSharp") { analyzer = new CSharpAnalyzer(this.Logger); } else if (activeDocument.Language == "Basic") { analyzer = new VisualBasicAnalyzer(this.Logger); } result = isSelection ? analyzer?.GetSelectionOutput(await document.GetSyntaxRootAsync(), semanticModel, selection.Start.Position, selection.End.Position, xamlIndent) : analyzer?.GetSingleItemOutput(await document.GetSyntaxRootAsync(), semanticModel, caretPosition.Position, xamlIndent); } else { await ShowStatusBarMessageAsync(serviceProvider, StringRes.UI_NoXamlCopiedNoProfilesConfigured); } return(result); }
public async Task <ParserOutput> GetXamlAsync(IAsyncServiceProvider serviceProvider) { ParserOutput result = null; if (CodeParserBase.GetSettings().Profiles.Any()) { if (!(await serviceProvider.GetServiceAsync(typeof(EnvDTE.DTE)) is DTE dte)) { RapidXamlPackage.Logger?.RecordError("Failed to get DTE in GetXamlFromCodeWindowBaseCommand.GetXamlAsync"); } else { var activeDocument = dte.ActiveDocument; var textView = await GetTextViewAsync(serviceProvider); var selection = textView.Selection; bool isSelection = selection.Start.Position != selection.End.Position; var caretPosition = textView.Caret.Position.BufferPosition; var document = caretPosition.Snapshot.GetOpenDocumentInCurrentContextWithChanges(); var semanticModel = await document.GetSemanticModelAsync(); var vs = new VisualStudioAbstraction(this.Logger, this.ServiceProvider, dte); var xamlIndent = await vs.GetXamlIndentAsync(); IDocumentParser parser = null; if (activeDocument.Language == "CSharp") { parser = new CSharpParser(this.Logger, xamlIndent); } else if (activeDocument.Language == "Basic") { parser = new VisualBasicParser(this.Logger, xamlIndent); } result = isSelection ? parser?.GetSelectionOutput(await document.GetSyntaxRootAsync(), semanticModel, selection.Start.Position, selection.End.Position) : parser?.GetSingleItemOutput(await document.GetSyntaxRootAsync(), semanticModel, caretPosition.Position); } }