1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#ifndef SQLENTERPRISEFORMATTER_H
#define SQLENTERPRISEFORMATTER_H
#include "sqlenterpriseformatter_global.h"
#include "plugins/genericplugin.h"
#include "plugins/sqlformatterplugin.h"
#include "config_builder.h"
#include "common/utils_sql.h"
#include "plugins/uiconfiguredplugin.h"
#include "parser/ast/sqlitequery.h"
namespace Cfg
{
QString getNameWrapperStr(NameWrapper wrapper);
QStringList getNameWrapperStrings();
}
CFG_CATEGORIES(SqlEnterpriseFormatterConfig,
CFG_CATEGORY(SqlEnterpriseFormatter,
CFG_ENTRY(int, TabSize, 4)
CFG_ENTRY(bool, LineUpKeywords, true)
CFG_ENTRY(bool, IndentParenthesisBlock, true)
CFG_ENTRY(bool, NlBeforeOpenParDef, false)
CFG_ENTRY(bool, NlAfterOpenParDef, true)
CFG_ENTRY(bool, NlBeforeCloseParDef, true)
CFG_ENTRY(bool, NlAfterCloseParDef, true)
CFG_ENTRY(bool, NlBeforeOpenParExpr, false)
CFG_ENTRY(bool, NlAfterOpenParExpr, false)
CFG_ENTRY(bool, NlBeforeCloseParExpr, false)
CFG_ENTRY(bool, NlAfterCloseParExpr, false)
CFG_ENTRY(bool, NlAfterJoinStmt, true)
CFG_ENTRY(bool, NlAfterComma, true)
CFG_ENTRY(bool, NlAfterCommaInExpr, false)
CFG_ENTRY(bool, NlAfterSemicolon, true)
CFG_ENTRY(bool, NlNeverBeforeSemicolon, true)
CFG_ENTRY(bool, NlBetweenConstraints, true)
CFG_ENTRY(bool, SpaceBeforeCommaInList, false)
CFG_ENTRY(bool, SpaceAfterCommaInList, true)
CFG_ENTRY(bool, SpaceBeforeOpenPar, true)
CFG_ENTRY(bool, SpaceAfterOpenPar, false)
CFG_ENTRY(bool, SpaceBeforeClosePar, false)
CFG_ENTRY(bool, SpaceAfterClosePar, true)
CFG_ENTRY(bool, SpaceBeforeDot, false)
CFG_ENTRY(bool, SpaceAfterDot, false)
CFG_ENTRY(bool, SpaceBeforeMathOp, true)
CFG_ENTRY(bool, SpaceAfterMathOp, true)
CFG_ENTRY(bool, NoSpaceAfterFunctionName, true)
CFG_ENTRY(bool, SpaceNeverBeforeSemicolon, true)
CFG_ENTRY(bool, SpaceNeverBeforeComma, true)
CFG_ENTRY(bool, UppercaseKeywords, true)
CFG_ENTRY(bool, UppercaseDataTypes, true)
CFG_ENTRY(bool, AlwaysUseNameWrapping, false)
CFG_ENTRY(QString, PrefferedWrapper, getNameWrapperStr(NameWrapper::BRACKET))
CFG_ENTRY(QStringList, Wrappers, getNameWrapperStrings(), false)
CFG_ENTRY(QString, PreviewCode, QString(), false)
CFG_ENTRY(bool, MoveAllCommentsToLineEnd, false)
CFG_ENTRY(bool, LineUpCommentsAtLineEnd, true)
CFG_ENTRY(QString, PreferredCommentMarker, "--")
CFG_ENTRY(QStringList, CommentMarkers, QStringList({"--", "/* */"}))
)
)
class SQLENTERPRISEFORMATTERSHARED_EXPORT SqlEnterpriseFormatter : public GenericPlugin, public SqlFormatterPlugin, public UiConfiguredPlugin
{
Q_OBJECT
SQLITESTUDIO_PLUGIN("sqlenterpriseformatter.json")
public:
SqlEnterpriseFormatter();
QString format(SqliteQueryPtr query);
bool init();
void deinit();
CfgMain* getMainUiConfig();
QString getConfigUiForm() const;
void configDialogOpen();
void configDialogClosed();
private:
struct Comment
{
int position = 0;
QString contents;
bool tokensBefore = false;
bool tokensAfter = false;
bool multiline = false;
};
QList<Comment*> collectComments(const TokenList& tokens);
QString applyComments(const QString& formatted, QList<Comment *> comments);
QList<TokenList> tokensByLines(const TokenList& tokens, bool includeSpaces = false);
TokenList adjustCommentsToEnd(const TokenList& inputTokens);
TokenList wrapOnlyComments(const TokenList& inputTokens);
TokenList optimizeInnerComments(const TokenList& inputTokens);
TokenList optimizeEndLineComments(const TokenList& inputTokens);
void indentMultiLineComments(const TokenList& inputTokens);
void wrapComment(const TokenPtr& token, bool isAtLineEnd);
QList<SqliteQueryPtr> previewQueries;
CFG_LOCAL_PERSISTABLE(SqlEnterpriseFormatterConfig, cfg)
private slots:
void updatePreview();
void configModified(CfgEntry* entry);
};
#endif // SQLENTERPRISEFORMATTER_H
|