Example #1
0
TEST(RawSyntaxTests, accumulateAbsolutePosition2) {
  auto Token = RawSyntax::make(tok::identifier,
                               OwnedString("aaa"),
                               SourcePresence::Present,
                               {TriviaPiece::blockComment("/* \n\r\r\n */")},
                               {  });
  AbsolutePosition Pos;
  Token->accumulateAbsolutePosition(Pos);
  ASSERT_EQ(4u, Pos.getLine());
  ASSERT_EQ(7u, Pos.getColumn());
  ASSERT_EQ(13u, Pos.getOffset());
}
Example #2
0
bool RawSyntax::accumulateAbsolutePosition(
    AbsolutePosition &Pos, const RawSyntax *UpToTargetNode) const {
  auto Found = this == UpToTargetNode;
  for (auto LE : Layout) {
    switch (LE->Kind) {
    case SyntaxKind::Token: {
      auto Tok = llvm::cast<TokenSyntax>(LE);
      for (auto Leader : Tok->LeadingTrivia) {
        Leader.accumulateAbsolutePosition(Pos);
      }

      if (Found) {
        return true;
      }

      Pos.addText(Tok->getText());

      for (auto Trailer : Tok->TrailingTrivia) {
        Trailer.accumulateAbsolutePosition(Pos);
      }
      break;
    }
    default:
      if (Found)
        return true;
      LE->accumulateAbsolutePosition(Pos, UpToTargetNode);
      break;
    }
  }
  return false;
}
Example #3
0
TEST(RawSyntaxTests, accumulateAbsolutePosition1) {
  auto Token = RawSyntax::make(tok::identifier,
                               OwnedString("aaa"),
                               SourcePresence::Present, 
                               {
                                 TriviaPiece::newlines(2),
                                 TriviaPiece::carriageReturns(2),
                                 TriviaPiece::carriageReturnLineFeeds(2)
                               },
                               {  });
  AbsolutePosition Pos;
  Token->accumulateAbsolutePosition(Pos);
  ASSERT_EQ(7u, Pos.getLine());
  ASSERT_EQ(4u, Pos.getColumn());
  ASSERT_EQ(11u, Pos.getOffset());
}
Example #4
0
void TriviaPiece::accumulateAbsolutePosition(AbsolutePosition &Pos) const {
  switch (Kind) {
  case TriviaKind::LineComment:
  case TriviaKind::BlockComment:
  case TriviaKind::DocBlockComment:
  case TriviaKind::DocLineComment:
    Pos.addText(Text.str());
    break;
  case TriviaKind::Newline:
    Pos.addNewlines(Count);
    break;
  case TriviaKind::Space:
  case TriviaKind::Backtick:
  case TriviaKind::Tab:
  case TriviaKind::VerticalTab:
  case TriviaKind::Formfeed:
    Pos.addColumns(Count);
    break;
  }
}
Example #5
0
llvm::Optional<AbsolutePosition>
RawSyntax::accumulateAbsolutePosition(AbsolutePosition &Pos) const {
  llvm::Optional<AbsolutePosition> Ret;
  if (isToken()) {
    if (isMissing())
      return None;
    for (auto &Leader : getLeadingTrivia())
      Leader.accumulateAbsolutePosition(Pos);
    Ret = Pos;
    Pos.addText(getTokenText());
    for (auto &Trailer : getTrailingTrivia())
      Trailer.accumulateAbsolutePosition(Pos);
  } else {
    for (auto &Child : getLayout()) {
      if (!Child)
        continue;
      auto Result = Child->accumulateAbsolutePosition(Pos);
      if (!Ret && Result)
        Ret = Result;
    }
  }
  return Ret;
}