public RawShaderNavigationResult AnalyzeAndGoToDefinition(string sourceCode, RawSourceSpan span) { var rawResult = new RawShaderNavigationResult(); var navigation = new ShaderNavigation(); var shaderDirectories = CollectShadersDirectories(null); if (span.File != null) { var dirName = Path.GetDirectoryName(span.File); if (dirName != null) { shaderDirectories.Add(dirName); } } var resultAnalysis = navigation.AnalyzeAndGoToDefinition(sourceCode, new SiliconStudio.Shaders.Ast.SourceLocation(span.File, 0, span.Line, span.Column), shaderDirectories); if (resultAnalysis.DefinitionLocation.Location.FileSource != null) { rawResult.DefinitionSpan = ConvertToRawLocation(resultAnalysis.DefinitionLocation); } foreach (var message in resultAnalysis.Messages.Messages) { rawResult.Messages.Add(ConvertToRawMessage(message)); } return rawResult; }
public void OutputAnalysisAndGotoLocation(RawShaderNavigationResult result, IVsTextView textView) { if (result == null) throw new ArgumentNullException("result"); if (textView == null) throw new ArgumentNullException("textView"); var source = GetNShaderSource(textView); OutputAnalysisMessages(result, source); GoToLocation(result.DefinitionSpan, null, false); }
private void OutputAnalysisMessages(RawShaderNavigationResult result, NShaderSource source = null) { lock (errorListProvider) { try { var taskProvider = source != null?source.GetTaskProvider() : null; if (taskProvider != null) { taskProvider.Tasks.Clear(); } errorListProvider.Tasks.Clear(); // clear previously created foreach (var message in result.Messages) { var errorCategory = TaskErrorCategory.Message; if (message.Type == "warning") { errorCategory = TaskErrorCategory.Warning; } else if (message.Type == "error") { errorCategory = TaskErrorCategory.Error; } // Make sure that we won't pass nay null to VS as it will crash it var filePath = message.Span.File ?? string.Empty; var messageText = message.Text ?? string.Empty; if (taskProvider != null && errorCategory == TaskErrorCategory.Error) { var task = source.CreateErrorTaskItem(ConvertToTextSpan(message.Span), filePath, messageText, TaskPriority.High, TaskCategory.CodeSense, MARKERTYPE.MARKER_CODESENSE_ERROR, TaskErrorCategory.Error); taskProvider.Tasks.Add(task); } else { var newError = new ErrorTask() { ErrorCategory = errorCategory, Category = TaskCategory.BuildCompile, Text = messageText, Document = filePath, Line = Math.Max(0, message.Span.Line - 1), Column = Math.Max(0, message.Span.Column - 1), // HierarchyItem = hierarchyItem // TODO Add hierarchy the file is associated to }; // Install our navigate to source newError.Navigate += NavigateToSourceError; errorListProvider.Tasks.Add(newError); // add item } } if (result.Messages.Count > 0) { errorListProvider.Show(); // make sure it is visible } else { errorListProvider.Refresh(); } if (taskProvider != null) { taskProvider.Refresh(); } } catch (Exception ex) { errorListProvider.Tasks.Add(new ErrorTask(ex.InnerException ?? ex)); } } }
private void OutputAnalysisMessages(RawShaderNavigationResult result, NShaderSource source = null) { lock (errorListProvider) { try { var taskProvider = source != null ? source.GetTaskProvider() : null; if (taskProvider != null) { taskProvider.Tasks.Clear(); } errorListProvider.Tasks.Clear(); // clear previously created foreach (var message in result.Messages) { var errorCategory = TaskErrorCategory.Message; if (message.Type == "warning") { errorCategory = TaskErrorCategory.Warning; } else if (message.Type == "error") { errorCategory = TaskErrorCategory.Error; } // Make sure that we won't pass nay null to VS as it will crash it var filePath = message.Span.File ?? string.Empty; var messageText = message.Text ?? string.Empty; if (taskProvider != null && errorCategory == TaskErrorCategory.Error) { var task = source.CreateErrorTaskItem(ConvertToTextSpan(message.Span), filePath, messageText, TaskPriority.High, TaskCategory.CodeSense, MARKERTYPE.MARKER_CODESENSE_ERROR, TaskErrorCategory.Error); taskProvider.Tasks.Add(task); } else { var newError = new ErrorTask() { ErrorCategory = errorCategory, Category = TaskCategory.BuildCompile, Text = messageText, Document = filePath, Line = Math.Max(0, message.Span.Line - 1), Column = Math.Max(0, message.Span.Column - 1), // HierarchyItem = hierarchyItem // TODO Add hierarchy the file is associated to }; // Install our navigate to source newError.Navigate += NavigateToSourceError; errorListProvider.Tasks.Add(newError); // add item } } if (result.Messages.Count > 0) { errorListProvider.Show(); // make sure it is visible } else { errorListProvider.Refresh(); } if (taskProvider != null) { taskProvider.Refresh(); } } catch (Exception ex) { errorListProvider.Tasks.Add(new ErrorTask(ex.InnerException ?? ex)); } } }
public void OutputAnalysisAndGotoLocation(RawShaderNavigationResult result, IVsTextView textView) { if (result == null) throw new ArgumentNullException("result"); if (textView == null) throw new ArgumentNullException("textView"); var source = GetNShaderSource(textView); OutputAnalysisMessages(result, source); GoToLocation(result.DefinitionSpan, null, false); }