private async Task <IOrderedEnumerable <ToDoItem> > GetItems() { await Task.Yield(); var items = new ConcurrentBag <ToDoItem>(); var projects = VBE.VBProjects.Cast <VBProject>().Where(project => project.Protection != vbext_ProjectProtection.vbext_pp_locked); Parallel.ForEach(projects, project => { var modules = _parser.Parse(project).ComponentParseResults; foreach (var module in modules) { var markers = module.Comments.AsParallel().SelectMany(GetToDoMarkers); foreach (var marker in markers) { items.Add(marker); } } }); var sortedItems = items.OrderBy(item => item.ProjectName) .ThenBy(item => item.ModuleName) .ThenByDescending(item => item.Priority) .ThenBy(item => item.LineNumber); return(sortedItems); }
private void _findAllReferencesContextMenu_Click(CommandBarButton Ctrl, ref bool CancelDefault) { var selection = IDE.ActiveCodePane.GetSelection(); var declarations = _parser.Parse(IDE.ActiveVBProject).Declarations; var target = declarations.Items .Where(item => item.DeclarationType != DeclarationType.ModuleOption) .FirstOrDefault(item => IsSelectedDeclaration(selection, item) || IsSelectedReference(selection, item)); if (target == null) { return; } FindAllReferences(target); }
private void _bgw_DoWork(object sender, DoWorkEventArgs e) { _parser.ParseStarted += _parser_ParseStarted; _parser.ResolutionProgress += _parser_ResolutionProgress; _parser.ParseProgress += _parser_ParseProgress; Result = _parser.Parse(_project); _parser.ParseStarted -= _parser_ParseStarted; _parser.ResolutionProgress -= _parser_ResolutionProgress; _parser.ParseProgress -= _parser_ParseProgress; }
private void RefreshExplorerTreeView() { Control.Invoke((MethodInvoker) delegate { Control.SolutionTree.Nodes.Clear(); Control.ShowDesignerButton.Enabled = false; }); _parser.Parse(VBE, this); }
private async Task <IEnumerable <TreeNode> > CreateModuleNodesAsync(VBProject project) { var result = new List <TreeNode>(); var parseResult = _parser.Parse(project); foreach (var componentParseResult in parseResult.ComponentParseResults) { var component = componentParseResult.Component; var members = parseResult.Declarations.Items .Where(declaration => declaration.ParentScope == component.Collection.Parent.Name + "." + component.Name && declaration.DeclarationType != DeclarationType.Control && declaration.DeclarationType != DeclarationType.ModuleOption); var node = new TreeNode(component.Name); node.ImageKey = ComponentTypeIcons[component.Type]; node.SelectedImageKey = node.ImageKey; node.Tag = parseResult.Declarations.Items.SingleOrDefault(item => item.IdentifierName == component.Name && item.Project == component.Collection.Parent && (item.DeclarationType == DeclarationType.Class || item.DeclarationType == DeclarationType.Module)); foreach (var declaration in members) { if (declaration.DeclarationType == DeclarationType.UserDefinedTypeMember || declaration.DeclarationType == DeclarationType.EnumerationMember) { // these ones are handled by their respective parent continue; } var text = GetNodeText(declaration); var child = new TreeNode(text); child.ImageKey = GetImageKeyForDeclaration(declaration); child.SelectedImageKey = child.ImageKey; child.Tag = declaration; if (declaration.DeclarationType == DeclarationType.UserDefinedType || declaration.DeclarationType == DeclarationType.Enumeration) { var subDeclaration = declaration; var subMembers = parseResult.Declarations.Items.Where(item => (item.DeclarationType == DeclarationType.EnumerationMember || item.DeclarationType == DeclarationType.UserDefinedTypeMember) && item.Context != null && subDeclaration.Context.Equals(item.Context.Parent)); foreach (var subMember in subMembers) { var subChild = new TreeNode(subMember.IdentifierName); subChild.ImageKey = GetImageKeyForDeclaration(subMember); subChild.SelectedImageKey = subChild.ImageKey; subChild.Tag = subMember; child.Nodes.Add(subChild); } } node.Nodes.Add(child); } result.Add(node); } return(result); }
public void Parse(VBE vbe, object owner) { Task.Run(() => _parser.Parse(vbe, owner)); }