예제 #1
0
        public void TestNodePositions2()
        {
            var code = @"
                // comment 1
                while /* inner comment 1 */ ( /* inner comment 2 */ true) /* inner comment 3 */ {
                    
                }
                // comment 2
            ";

            var node = ParsingHelper.ParseSourceFile(code);

            foreach (var n in NodeWalkerEx.GetDescendantNodes(node))
            {
                if (n.Type == NodeOrNodesOrNullType.Nodes)
                {
                    Assert.True(n.Nodes.Pos <= n.Nodes.End);
                }

                if (n.Type == NodeOrNodesOrNullType.Node)
                {
                    Assert.True(n.Node.Pos <= n.Node.End);
                }
            }
        }
예제 #2
0
        public void ComputePositionBackAndForth()
        {
            string code =
                @"namespace X {
    enum Foo {value = 42}
}";

            var sourceFile = ParsingHelper.ParseSourceFile(code);

            var enumMember = NodeWalkerEx.GetDescendantNodes(sourceFile).First(n => n.Node.Kind == SyntaxKind.EnumMember).Node.Cast <IEnumMember>();
            var lineInfo   = enumMember.GetLineInfo(sourceFile);

            NodeExtensions.TryConvertLineOffsetToPosition(sourceFile, lineInfo.Line, lineInfo.Position, out var position);
            Assert.Equal(enumMember.GetNodeStartPositionWithoutTrivia(), position);
            Assert.Equal(enumMember.Name, GetNodeAtPosition(sourceFile, position));
        }
예제 #3
0
        public void ComputePositionBackAndForthWithWeirdCommentsInside()
        {
            string code =
                @"
const x = 42;
/*
* Some comment
*/
namespace X {
    // simple comment
    enum /*another comment*/ Foo {/*and yet another comment*/value = 42}
}";

            var sourceFile = ParsingHelper.ParseSourceFile(code);

            var enumMember = NodeWalkerEx.GetDescendantNodes(sourceFile).First(n => n.Node.Kind == SyntaxKind.EnumMember).Node.Cast <IEnumMember>();
            var lineInfo   = enumMember.GetLineInfo(sourceFile);

            NodeExtensions.TryConvertLineOffsetToPosition(sourceFile, lineInfo.Line, lineInfo.Position, out var position);
            Assert.Equal(enumMember.GetNodeStartPositionWithoutTrivia(), position);
            Assert.Equal(enumMember.Name, GetNodeAtPosition(sourceFile, position));
        }