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.
This commit is contained in:
Jon Ross-Perkins
2024-10-09 17:33:29 +00:00
committed by GitHub
parent 33954d1f20
commit 434173b016
15 changed files with 306 additions and 7 deletions
+36
View File
@@ -0,0 +1,36 @@
// 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