コード例 #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 = FSharpNamesUtil.RemoveBackticks(qualifier.GetText());
                    Builder.StartPart(new QualifiedNamespacePart(qualifier.GetTreeStartOffset(), Builder.Intern(qualifierName)));
                }

                declaration.Accept(this);

                foreach (var _ in qualifiers)
                {
                    Builder.EndPart();
                }
            }
        }
コード例 #2
0
        public static string[] GetQualifiersAndName(this FSharpIdentifierToken token)
        {
            if (!(token.Parent is ILongIdentifier longIdentifier))
            {
                return new[] { FSharpNamesUtil.RemoveBackticks(token.GetText()) }
            }
            ;

            var names = new FrugalLocalHashSet <string>();

            foreach (var id in longIdentifier.IdentifiersEnumerable)
            {
                names.Add(FSharpNamesUtil.RemoveBackticks(id.GetText()));

                if (id == token)
                {
                    break;
                }
            }
            return(names.ToArray());
        }