protected override bool EvaluateCanExecute(object parameter) { if (_state.Status != ParserState.Ready) { return(false); } var activeSelection = SelectionService.ActiveSelection(); if (!activeSelection.HasValue) { return(false); } var interfaceClass = _state.AllUserDeclarations.SingleOrDefault(item => item.QualifiedName.QualifiedModuleName.Equals(activeSelection.Value.QualifiedName) && ModuleTypes.Contains(item.DeclarationType)); if (interfaceClass == null) { return(false); } // interface class must have members to be implementable var hasMembers = _state.AllUserDeclarations.Any(item => item.DeclarationType.HasFlag(DeclarationType.Member) && item.ParentDeclaration != null && item.ParentDeclaration.Equals(interfaceClass)); if (!hasMembers) { return(false); } var parseTree = _state.GetParseTree(interfaceClass.QualifiedName.QualifiedModuleName); var context = ((ParserRuleContext)parseTree).GetDescendents <VBAParser.ImplementsStmtContext>(); // true if active code pane is for a class/document/form module return(!context.Any() && !_state.IsNewOrModified(interfaceClass.QualifiedModuleName) && !_state.IsNewOrModified(activeSelection.Value.QualifiedName)); }
private static string Parse(string code, string filename) { IVBComponent component; var vbe = MockVbeBuilder.BuildFromSingleStandardModule(code, out component); var state = new RubberduckParserState(vbe.Object); var parser = MockParser.Create(vbe.Object, state); parser.Parse(new CancellationTokenSource()); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error: " + filename); } var tree = state.GetParseTree(component); var parsed = tree.GetText(); var withoutEOF = parsed.Substring(0, parsed.Length - 5); return(withoutEOF); }
private string Parse(string code) { var builder = new MockVbeBuilder(); VBComponent component; var vbe = builder.BuildFromSingleStandardModule(code, out component); var mockHost = new Mock <IHostApplication>(); mockHost.SetupAllProperties(); var state = new RubberduckParserState(); var parser = MockParser.Create(vbe.Object, state); parser.Parse(); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } var tree = state.GetParseTree(component); var parsed = tree.GetText(); var withoutEOF = parsed.Substring(0, parsed.Length - 5); return(withoutEOF); }
private static string Parse(string code, string filename) { IVBComponent component; var vbe = MockVbeBuilder.BuildFromSingleStandardModule(code, out component); var state = new RubberduckParserState(vbe.Object, new DeclarationFinderFactory()); var parser = MockParser.Create(vbe.Object, state); parser.Parse(new CancellationTokenSource()); if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error: " + filename); } var tree = state.GetParseTree(new QualifiedModuleName(component)); var parsed = tree.GetText(); var withoutEOF = parsed; while (withoutEOF.Length >= 5 && String.Equals(withoutEOF.Substring(withoutEOF.Length - 5, 5), "<EOF>")) { withoutEOF = withoutEOF.Substring(0, withoutEOF.Length - 5); } return(withoutEOF); }
public IEnumerable <ICodeMetricResult> ModuleResults(QualifiedModuleName moduleName, RubberduckParserState state) { return(TraverseModuleTree(state.GetParseTree(moduleName), state.DeclarationFinder, moduleName)); }
public ModuleMetricsResult GetModuleResult(RubberduckParserState state, QualifiedModuleName qmn) { return(GetModuleResult(qmn, state.GetParseTree(qmn), state.DeclarationFinder)); }