Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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));
                }
            }
        }
Exemplo n.º 4
0
        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));
                }
            }
        }
Exemplo n.º 5
0
        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);
        }