UNPKG

rawsql-ts

Version:

High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.

95 lines 4.18 kB
import { SqlPrintTokenContainerType, SqlPrintTokenType } from "../models/SqlPrintToken"; export class OnelineFormattingHelper { constructor(options) { this.options = options; } shouldFormatContainer(token, shouldIndentNested) { switch (token.containerType) { case SqlPrintTokenContainerType.ParenExpression: return this.options.parenthesesOneLine && !shouldIndentNested; case SqlPrintTokenContainerType.BetweenExpression: return this.options.betweenOneLine; case SqlPrintTokenContainerType.Values: return this.options.valuesOneLine; case SqlPrintTokenContainerType.JoinOnClause: return this.options.joinOneLine; case SqlPrintTokenContainerType.CaseExpression: return this.options.caseOneLine; case SqlPrintTokenContainerType.InlineQuery: return this.options.subqueryOneLine; default: return false; } } isInsertClauseOneline(parentContainerType) { if (!this.options.insertColumnsOneLine) { return false; } return parentContainerType === SqlPrintTokenContainerType.InsertClause || parentContainerType === SqlPrintTokenContainerType.MergeInsertAction; } shouldInsertJoinNewline(insideWithClause) { return !(insideWithClause && this.options.withClauseStyle === 'full-oneline'); } resolveCommaBreak(parentContainerType, commaBreak, cteCommaBreak, valuesCommaBreak) { if (parentContainerType === SqlPrintTokenContainerType.WithClause) { return cteCommaBreak; } if (parentContainerType === SqlPrintTokenContainerType.AnalyzeStatement) { // Keep ANALYZE column lists compact so comma break preferences do not insert newlines. return 'none'; } if (parentContainerType === SqlPrintTokenContainerType.ExplainStatement) { return 'none'; } if (parentContainerType === SqlPrintTokenContainerType.Values) { return valuesCommaBreak; } if (this.isInsertClauseOneline(parentContainerType)) { return 'none'; } return commaBreak; } shouldSkipInsertClauseSpace(parentContainerType, nextToken, currentLineText) { const isInsertContainer = parentContainerType === SqlPrintTokenContainerType.InsertClause || parentContainerType === SqlPrintTokenContainerType.MergeInsertAction; if (!isInsertContainer) { return false; } if (nextToken && nextToken.type === SqlPrintTokenType.parenthesis && nextToken.text === '(') { return true; } if (!this.options.insertColumnsOneLine) { return false; } const lastChar = currentLineText.slice(-1); return lastChar === '(' || lastChar === ' ' || lastChar === ''; } shouldSkipCommentBlockSpace(parentContainerType, insideWithClause) { return parentContainerType === SqlPrintTokenContainerType.CommentBlock && insideWithClause && this.options.withClauseStyle === 'full-oneline'; } formatInsertClauseToken(text, parentContainerType, currentLineText, ensureTrailingSpace) { var _a, _b; if (!this.isInsertClauseOneline(parentContainerType)) { return { handled: false }; } if (text === '') { return { handled: true }; } const leadingWhitespace = (_b = (_a = text.match(/^\s+/)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : ''; const trimmed = leadingWhitespace ? text.slice(leadingWhitespace.length) : text; if (trimmed === '') { return { handled: true }; } if (leadingWhitespace) { const lastChar = currentLineText.slice(-1); if (lastChar !== '(' && lastChar !== ' ' && lastChar !== '') { ensureTrailingSpace(); } } return { handled: true, text: trimmed }; } } //# sourceMappingURL=OnelineFormattingHelper.js.map