我和我的搭档正在为 C++ 代码开发漂亮的打印机。该工具解析输入的 C++ 代码并打印生成的 AST,因此我们具有相当大的灵活性。我们已经为用户实现了一些选项来控制输出,现在我们正在寻找关于最重要选项的意见。如果你可以看看我们的当前(下)然后告诉我们你喜欢/不喜欢什么,还有什么应该在那里等等,那就太好了。
谢谢,乔
以下是一些当前的选项(对不起,长度):
1. 控制块
1.1 缩进字符串
定义用于每个缩进的空白字符串。
例子:
• 缩进字符串“”</p>
void f ()
{
int a;
}
• 缩进字符串“\t”</p>
void f ()
{
int m;
}
1.2 OpenBrace 位置
三个选项是:“EndOfLine”、“NextLine”或“NextLineAsWellAsCloseParen”</p>
在与其关联的关键字的同一行或下一行开始打开大括号。如果最后一个选项也存在于下一行,则最后一个选项将左括号移到左括号之前。
适用于 if、while、for、switch 和 do-while 语句。
如果不存在,则使用“EndOfLine”选项。
例子:
• OpenBraceLocation EndOfLine
if(val){
val++;
}
• OpenBraceLocation 下一行
if(val)
{
val++;
}
• OpenBraceLocation NextLineAsWellAsCloseParen
if(val
){
val++;
}
1.3 NoBracesAroundSingleStatementBlock
从只有一条语句的语句块中删除大括号。此选项适用于 do-while、for、if 和 while 块。
例子:
• NoBracesAroundSingleStatementBlock 存在
if(a)
func();
• NoBracesAroundSingleStatementBlock 不存在
if(a)
{
func();
}
2. 课程
2.1 虚拟限定符
选项是:“无处不在”或“极简主义”。当使用“Everywhere”时,关键字“virtual”出现在所有派生类中,位于基类中声明为 virtual 的函数前面。对于“极简主义”,它只出现在基类中。
例子 :
• virtualQualifier 无处不在
class Base
{
virtual void f(int a);
}
class Derived : public Base
{
virtual void f( int a);
class MostDerived : public Derived
{
virtual void f( int a);
• virtualQualifier 极简主义
class Base
{
virtual void f(int a);
}
class Derived : public Base
{
void f( int a);
class MostDerived : public Derived
{
void f( int a);
2.2 排序类成员
级别选项是“Access”、“Data/Functions”或“Functions/Data”和“Alpha”。如果没有提供 level-option 或 SortClassMember 不存在,则成员的顺序不变。
例子:
• SortClassMembers 数据/函数访问 Alpha
class Compiler
{
private:
string inputFileName;
public:
Compiler( string const & inputFileName_);
genOutput( string const & outputFileName_);
private:
analyze();
emitCode( string const & );
parse();
tokenize( string const & inputFileName_);
}
• SortClassMembers 访问函数/数据 Alpha
class C
{
public:
Compiler( string const & inputFileName_);
genOutput( string const & outputFileName_);
private:
analyze();
emitCode( string const & );
parse();
tokenize( string const & inputFileName_);
private:
string inputFileName;
}
• SortClassMembers 访问 Alpha
class C
{
public:
Compiler( string const & inputFileName_);
genOutput( string const & outputFileName_);
private:
analyze();
emitCode( string const & );
string inputFileName;
parse();
tokenize( string const & inputFileName_);
}
3. 文件
3.1 最大线宽
定义最大线宽。如果可能,PrettyC++ 将智能地换行更长的行。
例子:
• 最大线宽 80
int x = 123456789;
• 最大线宽 10
int x =
123456789;
3.2 构造位置
选项是“之前”或“之后”。Before 选项将 const 关键字放在类型说明符之前。After 选项将 const 关键字放在类型说明符之后。
例子 :
• constLocation 之前
const int x;
• constLocation 之后
int const x;
4.名称
4.1 AllNamesStartCase
选项是“小写”或“大写”。
例子:
• AllNamesStartCase 小写
int variable = 123456789;
• AllNamesStartCase 大写
int Variable = 123456789;
4.2 AllNamesDelimitWords
选项是“CaseDelimited”或“UnderscoreDelimited”。单词以大写字母开头或后跟下划线标识。
例子:
• AllNamesDelimitWords CaseDelimited
int myVariable = 123456789;
• AllNamesDelimitWords UnderscoreDelimited
int my_variable = 123456789;
4.3 FunctionNamesStartCase
选项是“小写”或“大写”。
例子:
• FunctionNamesStartCase 小写
void function() { return; }
• FunctionNamesStartCase 大写
void Function() { return; }
4.4 FunctionNamesDelimitWords
选项是“CaseDelimited”或“UnderscoreDelimited”。单词以大写字母开头或后跟下划线标识。
例子:
• FunctionNamesDelimitWords CaseDelimited
void myFunction() { return; }
• FunctionNamesDelimitWords UnderscoreDelimited
void my_function() { return; }