示例#1
0
        public override void VisitFSharpFile(IFSharpFile fsFile)
        {
            fsFile.TokenBuffer = fsFile.ActualTokenBuffer; // todo: remove this when/if a proper lexer is implemented
            var sourceFile  = fsFile.GetSourceFile();
            var fileKind    = GetFSharpFileKind(fsFile);
            var hasPairFile = myCheckerService.HasPairFile(sourceFile);

            Builder.CreateProjectFilePart(new FSharpProjectFilePart(sourceFile, fileKind, hasPairFile));

            foreach (var declaration in fsFile.DeclarationsEnumerable)
            {
                var qualifiers = declaration.LongIdentifier.Qualifiers;
                foreach (var qualifier in qualifiers)
                {
                    var qualifierName = qualifier.GetText().RemoveBackticks();
                    Builder.StartPart(new QualifiedNamespacePart(qualifier.GetTreeStartOffset(), Builder.Intern(qualifierName)));
                }

                declaration.Accept(this);

                foreach (var _ in qualifiers)
                {
                    Builder.EndPart();
                }
            }
        }
示例#2
0
        public void ProcessNamedModuleLikeDeclaration(INamedModuleLikeDeclaration decl, Part part)
        {
            var qualifiers = decl.LongIdentifier?.Qualifiers ?? TreeNodeCollection <ITokenNode> .Empty;

            foreach (var qualifier in qualifiers)
            {
                var qualifierName = Builder.Intern(qualifier.GetText().RemoveBackticks());
                Builder.StartPart(new QualifiedNamespacePart(qualifier.GetTreeStartOffset(), qualifierName));
            }

            Builder.StartPart(part);
            FinishModuleLikeDeclaration(decl);

            foreach (var _ in qualifiers)
            {
                Builder.EndPart();
            }
        }
示例#3
0
        public override void VisitFSharpFile(IFSharpFile fsFile)
        {
            var sourceFile = fsFile.GetSourceFile();

            if (sourceFile == null)
            {
                return;
            }

            var fileKind    = GetFSharpFileKind(fsFile);
            var hasPairFile = myCheckerService.HasPairFile(sourceFile);

            Builder.CreateProjectFilePart(new FSharpProjectFilePart(sourceFile, fileKind, hasPairFile));

            foreach (var declaration in fsFile.DeclarationsEnumerable)
            {
                var qualifiers = declaration.LongIdentifier?.Qualifiers;
                if (qualifiers == null)
                {
                    declaration.Accept(this);
                    continue;
                }

                foreach (var qualifier in qualifiers)
                {
                    var qualifierName = qualifier.GetText().RemoveBackticks();
                    Builder.StartPart(new QualifiedNamespacePart(qualifier.GetTreeStartOffset(), Builder.Intern(qualifierName)));
                }

                declaration.Accept(this);

                foreach (var _ in qualifiers)
                {
                    Builder.EndPart();
                }
            }
        }
示例#4
0
        private void EndNamespaceQualifier([CanBeNull] IReferenceName referenceName)
        {
            if (referenceName == null)
            {
                return;
            }

            EndNamespaceQualifier(referenceName.Qualifier);
            Builder.EndPart();
        }