コード例 #1
0
        private (string interfaceCode, string implementationCode) ApplyQuickFixToAppropriateInspectionResultsForImplementedInterface(
            string interfaceCode,
            string implementationCode,
            Func <RubberduckParserState, IInspection> inspectionFactory,
            Action <IQuickFix, IEnumerable <IInspectionResult>, IRewriteSession> applyQuickFix,
            CodeKind codeKind)
        {
            var(vbe, interfaceModuleName, implementationModuleName) = TestVbeForImplementedInterface(interfaceCode, implementationCode);

            var(state, rewriteManager) = MockParser.CreateAndParseWithRewritingManager(vbe);
            using (state)
            {
                var inspection        = inspectionFactory(state);
                var inspectionResults = InspectionResults(inspection, state);
                var rewriteSession    = codeKind == CodeKind.AttributesCode
                    ? rewriteManager.CheckOutAttributesSession()
                    : rewriteManager.CheckOutCodePaneSession();

                var quickFix = QuickFix(state);

                applyQuickFix(quickFix, inspectionResults, rewriteSession);

                var actualInterfaceCode      = rewriteSession.CheckOutModuleRewriter(interfaceModuleName).GetText();
                var actualImplementationCode = rewriteSession.CheckOutModuleRewriter(implementationModuleName).GetText();

                return(actualInterfaceCode, actualImplementationCode);
            }
        }
コード例 #2
0
        public IExtendedConsoleSession WriteCode(
            string lexeme,
            CodeKind codeKind)
        {
            var classification = _colorTheme.GetCodeClassification(codeKind);

            return(Write(lexeme, classification.Foreground));
        }
コード例 #3
0
 public SyntaxErrorException(string message, RecognitionException innerException, IToken offendingSymbol, int line, int position, CodeKind codeKind)
     : base(message, innerException)
 {
     OffendingSymbol = offendingSymbol;
     LineNumber      = line;
     Position        = position;
     CodeKind        = codeKind;
 }
コード例 #4
0
 public SyntaxErrorInfo(string message, RecognitionException innerException, IToken offendingSymbol, int line, int position, CodeKind codeKind)
 {
     Message         = message;
     Exception       = innerException;
     OffendingSymbol = offendingSymbol;
     LineNumber      = line;
     Position        = position;
     CodeKind        = codeKind;
 }
コード例 #5
0
 protected string ApplyQuickFixToFirstInspectionResult(string inputCode,
                                                       Func <RubberduckParserState, IInspection> inspectionFactory,
                                                       CodeKind codeKind = CodeKind.CodePaneCode)
 {
     return(ApplyQuickFixToAppropriateInspectionResults(
                inputCode,
                inspectionFactory,
                ApplyToFirstResult,
                codeKind));
 }
コード例 #6
0
        private IParseTree ParseSll(string moduleName, ITokenStream tokenStream, CodeKind codeKind)
        {
            var errorListener = _sllErrorListenerFactory.Create(moduleName, codeKind);
            var tree          = Parse(tokenStream, PredictionMode.Sll, errorListener);

            if (errorListener.HasPostponedException(out var exception))
            {
                throw exception;
            }
            return(tree);
        }
コード例 #7
0
        public CodeClassification GetCodeClassification(CodeKind codeKind)
        {
            if (!_codeKindMap.TryGetValue(codeKind, out var func))
            {
                throw new KeyNotFoundException();
            }

            var value = func(this);

            return(value);
        }
        public (IParseTree tree, ITokenStream tokenStream) Parse(string moduleName, string projectId, string code, CancellationToken token,
                                                                 CodeKind codeKind = CodeKind.SnippetCode, ParserMode parserMode = ParserMode.FallBackSllToLl)
        {
            token.ThrowIfCancellationRequested();
            var tokenStream = _tokenStreamProvider.Tokens(code);

            token.ThrowIfCancellationRequested();
            var tree = _tokenStreamParser.Parse(moduleName, tokenStream, codeKind, parserMode);

            return(tree, tokenStream);
        }
コード例 #9
0
ファイル: CommonDAO.cs プロジェクト: isliulin/HNWN_Applet
        /// <summary>
        /// 根据名称获取编码
        /// </summary>
        /// <param name="kindName">编码类别</param>
        /// <returns></returns>
        public List <CodeContent> GetCodeContentByKind(string kindName)
        {
            List <CodeContent> res = new List <CodeContent>();

            CodeKind codeKind = SelfDber.Entity <CodeKind>("where Kind=:Kind", new { Kind = kindName });

            if (codeKind != null)
            {
                res = SelfDber.Entities <CodeContent>("where KindId=:KindId order by CodeOrder asc", new { KindId = codeKind.Id });
            }

            return(res);
        }
コード例 #10
0
 protected string ApplyQuickFixToFirstInspectionResult(
     IVBE vbe,
     string componentName,
     Func <RubberduckParserState, IInspection> inspectionFactory,
     CodeKind codeKind = CodeKind.CodePaneCode)
 {
     return(ApplyQuickFixToAppropriateInspectionResults(
                vbe,
                componentName,
                inspectionFactory,
                ApplyToFirstResult,
                codeKind));
 }
コード例 #11
0
 protected (string interfaceCode, string implementationCode) ApplyQuickFixToFirstInspectionResultForImplementedInterface(
     string interfaceInputCode,
     string implementationInputCode,
     Func <RubberduckParserState, IInspection> inspectionFactory,
     CodeKind codeKind = CodeKind.CodePaneCode)
 {
     return(ApplyQuickFixToAppropriateInspectionResultsForImplementedInterface(
                interfaceInputCode,
                implementationInputCode,
                inspectionFactory,
                ApplyToFirstResult,
                codeKind));
 }
コード例 #12
0
        private IRewriteSession RewriteSession(CodeKind targetCodeKind)
        {
            switch (targetCodeKind)
            {
            case CodeKind.CodePaneCode:
                return(_rewritingManager.CheckOutCodePaneSession());

            case CodeKind.AttributesCode:
                return(_rewritingManager.CheckOutAttributesSession());

            default:
                throw new NotSupportedException(nameof(targetCodeKind));
            }
        }
コード例 #13
0
        private string ApplyQuickFixToAppropriateInspectionResults(string inputCode,
                                                                   Func <RubberduckParserState, IInspection> inspectionFactory,
                                                                   Action <IQuickFix, IEnumerable <IInspectionResult>, IRewriteSession> applyQuickFix,
                                                                   CodeKind codeKind)
        {
            var vbe = TestVbe(inputCode, out var component);

            return(ApplyQuickFixToAppropriateInspectionResults(
                       vbe,
                       component.Name,
                       inspectionFactory,
                       applyQuickFix,
                       codeKind));
        }
コード例 #14
0
        protected string ApplyQuickFixToFirstInspectionResultSatisfyingPredicate(
            string code,
            Func <RubberduckParserState, IInspection> inspectionFactory,
            Func <IInspectionResult, bool> predicate,
            CodeKind codeKind = CodeKind.CodePaneCode)
        {
            var applyQuickFix = ApplyToFirstResultSatisfyingPredicateAction(predicate);

            return(ApplyQuickFixToAppropriateInspectionResults(
                       code,
                       inspectionFactory,
                       applyQuickFix,
                       codeKind));
        }
コード例 #15
0
        protected (string interfaceCode, string implementationCode) ApplyQuickFixToFirstInspectionResultForImplementedInterfaceSatisfyingPredicate(
            string interfaceInputCode,
            string implementationInputCode,
            Func <RubberduckParserState, IInspection> inspectionFactory,
            Func <IInspectionResult, bool> predicate,
            CodeKind codeKind = CodeKind.CodePaneCode)
        {
            var applyQuickFix = ApplyToFirstResultSatisfyingPredicateAction(predicate);

            return(ApplyQuickFixToAppropriateInspectionResultsForImplementedInterface(
                       interfaceInputCode,
                       implementationInputCode,
                       inspectionFactory,
                       applyQuickFix,
                       codeKind));
        }
コード例 #16
0
        public IParseTree Parse(string moduleName, CommonTokenStream tokenStream, CodeKind codeKind = CodeKind.SnippetCode,
                                ParserMode parserMode = ParserMode.FallBackSllToLl)
        {
            switch (parserMode)
            {
            case ParserMode.FallBackSllToLl:
                return(ParseWithFallBack(moduleName, tokenStream, codeKind));

            case ParserMode.LlOnly:
                return(ParseLl(moduleName, tokenStream, codeKind));

            case ParserMode.SllOnly:
                return(ParseSll(moduleName, tokenStream, codeKind));

            default:
                throw new ArgumentException(nameof(parserMode));
            }
        }
コード例 #17
0
        private string ApplyQuickFixToAppropriateInspectionResults(string inputCode,
                                                                   Func <RubberduckParserState, IInspection> inspectionFactory,
                                                                   Action <IQuickFix, IEnumerable <IInspectionResult>, IRewriteSession> applyQuickFix,
                                                                   CodeKind codeKind)
        {
            var vbe = TestVbe(inputCode, out var component);

            var(state, rewriteManager) = MockParser.CreateAndParseWithRewritingManager(vbe);
            using (state)
            {
                var inspection        = inspectionFactory(state);
                var inspectionResults = InspectionResults(inspection, state);
                var rewriteSession    = codeKind == CodeKind.AttributesCode
                    ? rewriteManager.CheckOutAttributesSession()
                    : rewriteManager.CheckOutCodePaneSession();

                var quickFix = QuickFix(state);

                applyQuickFix(quickFix, inspectionResults, rewriteSession);

                return(rewriteSession.CheckOutModuleRewriter(component.QualifiedModuleName).GetText());
            }
        }
コード例 #18
0
        private Mock <IExecutableRewriteSession> MockSession(Func <IRewriteSession, bool> rewritingAllowed, CodeKind targetCodeKind)
        {
            var mockSession = new Mock <IExecutableRewriteSession>();

            mockSession.Setup(m => m.TryRewrite()).Callback(() => rewritingAllowed.Invoke(mockSession.Object));
            var status = RewriteSessionState.Valid;

            mockSession.SetupGet(m => m.Status).Returns(status);
            mockSession.SetupSet(m => m.Status = It.IsAny <RewriteSessionState>())
            .Callback <RewriteSessionState>(value =>
            {
                if (status == RewriteSessionState.Valid)
                {
                    status = value;
                    mockSession.SetupGet(m => m.Status).Returns(status);
                }
            });
            mockSession.Setup(m => m.TargetCodeKind).Returns(targetCodeKind);

            var checkedOutModules = new HashSet <QualifiedModuleName>();

            mockSession.Setup(m => m.CheckOutModuleRewriter(It.IsAny <QualifiedModuleName>()))
            .Returns((QualifiedModuleName module) => null)
            .Callback((QualifiedModuleName module) => checkedOutModules.Add(module));
            mockSession.Setup(m => m.CheckedOutModules).Returns(() => checkedOutModules);

            return(mockSession);
        }
コード例 #19
0
 public ParsePassErrorListenerBase(string moduleName, CodeKind codeKind)
     : base(codeKind)
 {
     ModuleName = moduleName;
 }
コード例 #20
0
 public ParsePassSyntaxErrorException(string message, RecognitionException innerException, IToken offendingSymbol, int line, int position, string moduleName, CodeKind codeKind)
     : base(message, innerException, offendingSymbol, line, position, codeKind)
 {
     ModuleName = moduleName;
     CodeKind   = codeKind;
 }
コード例 #21
0
 private IExecutableRewriteSession RewriteSession(CodeKind codeKind)
 {
     return(codeKind == CodeKind.AttributesCode
         ? _rewritingManager.CheckOutAttributesSession()
         : _rewritingManager.CheckOutCodePaneSession());
 }
コード例 #22
0
 public IRubberduckParseErrorListener Create(CodeKind codeKind)
 {
     return(new ExceptionErrorListener(codeKind));
 }
コード例 #23
0
 public ParsePassExceptionErrorListener(string moduleName, CodeKind codeKind)
     : base(moduleName, codeKind)
 {
 }
コード例 #24
0
 public MainParseSyntaxErrorException(string message, RecognitionException innerException, IToken offendingSymbol, int line, int position, string moduleName, CodeKind codeKind)
     : base(message, innerException, offendingSymbol, line, position, moduleName, codeKind)
 {
 }
コード例 #25
0
            private void WalkTrees(CodeInspectionSettings settings, RubberduckParserState state, IEnumerable <IParseTreeInspection> inspections, CodeKind codeKind)
            {
                var listeners = inspections
                                .Where(i => i.Severity != CodeInspectionSeverity.DoNotShow &&
                                       i.TargetKindOfCode == codeKind &&
                                       !IsDisabled(settings, i))
                                .Select(inspection => inspection.Listener)
                                .ToList();

                if (!listeners.Any())
                {
                    return;
                }

                List <KeyValuePair <QualifiedModuleName, IParseTree> > trees;

                switch (codeKind)
                {
                case CodeKind.AttributesCode:
                    trees = state.AttributeParseTrees;
                    break;

                case CodeKind.CodePaneCode:
                    trees = state.ParseTrees;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(codeKind), codeKind, null);
                }

                foreach (var componentTreePair in trees)
                {
                    foreach (var listener in listeners)
                    {
                        listener.CurrentModuleName = componentTreePair.Key;
                    }

                    ParseTreeWalker.Default.Walk(new CombinedParseTreeListener(listeners), componentTreePair.Value);
                }
            }
コード例 #26
0
 public RubberduckParseErrorListenerBase(CodeKind codeKind)
 {
     CodeKind = codeKind;
 }
コード例 #27
0
        public CommonTokenStream PreprocessTokenStream(string projectId, string moduleName, CommonTokenStream tokenStream, CancellationToken token, CodeKind codeKind = CodeKind.SnippetCode)
        {
            token.ThrowIfCancellationRequested();

            var tree = _parser.Parse(moduleName, tokenStream, codeKind);

            token.ThrowIfCancellationRequested();

            var charStream  = tokenStream.TokenSource.InputStream;
            var symbolTable = new SymbolTable <string, IValue>();
            var userCompilationArguments      = _compilationArgumentsProvider.UserDefinedCompilationArguments(projectId);
            var predefinedCompilationArgument = _compilationArgumentsProvider.PredefinedCompilationConstants;
            var evaluator       = new VBAPreprocessorVisitor(symbolTable, predefinedCompilationArgument, userCompilationArguments, charStream, tokenStream);
            var expr            = evaluator.Visit(tree);
            var processedTokens = expr.Evaluate(); //This does the actual preprocessing of the token stream as a side effect.

            tokenStream.Reset();
            return(tokenStream);
        }
コード例 #28
0
 public PreprocessorExceptionErrorListener(string moduleName, CodeKind codeKind)
     : base(moduleName, codeKind)
 {
 }
コード例 #29
0
 public IRubberduckParseErrorListener Create(string moduleName, CodeKind codeKind)
 {
     return(new MainParseExceptionErrorListener(moduleName, codeKind));
 }
コード例 #30
0
 public SyntaxErrorNotificationListener(CodeKind codeKind)
     : base(codeKind)
 {
 }