Files
carbon-lang/toolchain/format/format.cpp
T
Jon Ross-Perkins 434173b016 Add skeletal format subcommand. (#4383)
This extracts out the SourceBuffer handling of `-` in order to trivially
share it.

Note this still has a number of TODOs, it's just setting up the
essential subcommand infrastructure, with some tests demonstrating that
it at least does something.
2024-10-09 17:33:29 +00:00

37 lines
996 B
C++

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#include "toolchain/format/format.h"
#include "toolchain/lex/token_index.h"
#include "toolchain/lex/tokenized_buffer.h"
namespace Carbon::Format {
// TODO: Add support for formatting line ranges (will need flags too).
auto Format(const Lex::TokenizedBuffer& tokens, llvm::raw_ostream& out)
-> bool {
if (tokens.has_errors()) {
// TODO: Error recovery.
return false;
}
llvm::ListSeparator sep(" ");
for (auto token : tokens.tokens()) {
switch (tokens.GetKind(token)) {
case Lex::TokenKind::FileStart:
break;
case Lex::TokenKind::FileEnd:
out << "\n";
break;
default:
// TODO: More dependent formatting.
out << sep << tokens.GetTokenText(token);
break;
}
}
return true;
}
} // namespace Carbon::Format