public JSParserResult Parse(string code)
        {
            var jsp            = new Jint.Parser.JavaScriptParser();
            var returnedResult = new JSParserResult();

            Program program = null;

            try
            {
                program = jsp.Parse(code, new ParserOptions()
                {
                    Tokens  = true,
                    Comment = true,
                });
            }
            catch (ParserException pex)
            {
                returnedResult.Errors.Add(new ErrorMessage()
                {
                    Message     = pex.Message,
                    StartColumn = pex.Column,
                    StartLine   = pex.LineNumber
                });
            }
            catch (Exception ex)
            {
                returnedResult.InternalErrors.Add(new ErrorMessage()
                {
                    Message     = ex.Message,
                    StartColumn = 1,
                    StartLine   = 1
                });
            }

            if (program == null)
            {
                return(returnedResult);
            }

            var comments = (program.Comments ?? Enumerable.Empty <Comment>())
                           .Select(c => new CommentWrapper(c));

            _comments = new CommentsAgregator();
            _comments.ProcessComments(comments);

            ProcessStatements(program.Body, new ParserContext(returnedResult.Nodes));

            returnedResult.TaskList = TaskListAggregator.GetTaskList(_comments.Comments, _settings.ToDoKeyWords).ToList();

            return(returnedResult);
        }
예제 #2
0
        public JSParserResult Parse(string code)
        {
            var jsp = new Jint.Parser.JavaScriptParser();
            var returnedResult = new JSParserResult();

            Program program = null;
            try
            {
                program = jsp.Parse(code, new ParserOptions()
                {
                    Tokens = true,
                    Comment = true,
                });
            }
            catch (ParserException pex)
            {
                returnedResult.Errors.Add(new ErrorMessage()
                {
                    Message = pex.Message,
                    StartColumn = pex.Column,
                    StartLine = pex.LineNumber
                });
            }
            catch (Exception ex)
            {
                returnedResult.InternalErrors.Add(new ErrorMessage()
                {
                    Message = ex.Message,
                    StartColumn = 1,
                    StartLine = 1
                });
            }

            if (program == null)
            {
                return returnedResult;
            }

            var comments = (program.Comments ?? Enumerable.Empty<Comment>())
                .Select(c => new CommentWrapper(c));

            _comments = new CommentsAgregator();
            _comments.ProcessComments(comments);

            ProcessStatements(program.Body, new ParserContext(returnedResult.Nodes));

            returnedResult.TaskList = TaskListAggregator.GetTaskList(_comments.Comments, _settings.ToDoKeyWords).ToList();

            return returnedResult;
        }
예제 #3
0
        /// <summary>
        /// Build the tree.
        /// </summary>
        public bool UpdateTree(JSParserResult result, ICodeProvider codeProvider)
        {
            if (result == null)
            {
                Clear();
                return false;
            }
            if(string.IsNullOrEmpty(result.FileName))
            {
                return false;
            }

            StatisticsManager.Instance.Statistics.Container = codeProvider.ContainerName;
            PerformNetworkActivity();

            _lastParserResult = result;
            _codeProvider = codeProvider;

            _loadedDocName = _lastParserResult.FileName;
            _expandedNodesManager.SetFile(_loadedDocName);
            _marksManager.SetFile(_loadedDocName);

            var isSort = Settings.SortingEnabled;
            var isHierarchy = true;

            _treeRefreshing = true;
            treeView1.BeginUpdate();
            treeView1.Nodes.Clear();
            _tempTreeNodes.Clear();
            _canExpand = true;

            var nodes = result.Nodes;

            if (result.Errors.Count > 0)
            {
                btnErrorDiagnosis.Visible = true;
                btnErrorSeparator.Visible = true;
                btnErrorDiagnosis.DropDownItems.Clear();
                result.Errors.ForEach(er =>
                {
                    var item = btnErrorDiagnosis.DropDownItems.Add(er.Message.SplitWordsByCamelCase() + ".\r\nLine: " + er.StartLine, null, ErrorDiagnosisClick);
                    item.Tag = er;
                });
            }
            else
            {
                btnErrorDiagnosis.Visible = false;
                btnErrorSeparator.Visible = false;
            }

            var tasksDataSource = new List<object>();
            if (result.TaskList.Count > 0)
            {
                lbTaskList.Text = string.Format("      Task List: {0} items", result.TaskList.Count);
                int i = 0;
                result.TaskList.ForEach(t =>
                {
                    ++i;
                    var item = new {
                        No = i.ToString(),
                        Desc = t.Description,
                        Line = t.StartLine.ToString(),
                    };

                    tasksDataSource.Add(item);
                });

                splitContainer1.Panel2Collapsed = false;

                SetToDoSplitterPosition();
            }
            else
            {
                splitContainer1.Panel2Collapsed = true;
                tasksDataSource.Add(new {No = "", Desc="", Line="" }); //add fake row to workaround column sizing bug
            }

            taskListDataGrid.DataSource = tasksDataSource;
            taskListDataGrid.CurrentCell = null;

            _lastCodeLine = -1;
            _functions = new List<CodeNode>();
            FillNodes(nodes, treeView1.Nodes, 0, _functions);

            if (!isHierarchy)
            {
                if (isSort)
                {
                    _tempTreeNodes.Sort((n1, n2) => string.Compare(n1.Text, n2.Text));
                }

                foreach (TreeNode node in _tempTreeNodes)
                {
                    treeView1.Nodes.Add(node);
                }
            }

            if (filterByMarksToolStripMenuItem.Checked)
            {
                HideUnmarkedNodes(treeView1.Nodes);
            }

            treeView1.EndUpdate();
            _treeRefreshing = false;
            AdjustLineNumbersPanelSize();
            panelLinesNumbers.Refresh();
            return treeView1.Nodes.Count > 0;
        }