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); } } }
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)); }
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)); }