Skip to content

Commit 6dac1d9

Browse files
author
Patrick Schemitz
committed
indent all identifiers, including the first one, by width instead of keyword length
1 parent 9cf45eb commit 6dac1d9

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

sqlparse/filters/reindent.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212

1313
class ReindentFilter(object):
1414
def __init__(self, width=2, char=' ', wrap_after=0, n='\n',
15-
comma_first=False, indent_after_first=False):
15+
comma_first=False, indent_after_first=False,
16+
indent_columns=False):
1617
self.n = n
1718
self.width = width
1819
self.char = char
1920
self.indent = 1 if indent_after_first else 0
2021
self.offset = 0
2122
self.wrap_after = wrap_after
2223
self.comma_first = comma_first
24+
self.indent_columns = indent_columns
2325
self._curr_stmt = None
2426
self._last_stmt = None
2527

@@ -118,8 +120,12 @@ def _process_parenthesis(self, tlist):
118120

119121
def _process_identifierlist(self, tlist):
120122
identifiers = list(tlist.get_identifiers())
121-
first = next(identifiers.pop(0).flatten())
122-
num_offset = 1 if self.char == '\t' else self._get_offset(first)
123+
if self.indent_columns:
124+
first = next(identifiers[0].flatten())
125+
num_offset = 1 if self.char == '\t' else self.width
126+
else:
127+
first = next(identifiers.pop(0).flatten())
128+
num_offset = 1 if self.char == '\t' else self._get_offset(first)
123129
if not tlist.within(sql.Function):
124130
with offset(self, num_offset):
125131
position = 0

sqlparse/formatter.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ def validate_options(options):
5656
options['truncate_strings'] = truncate_strings
5757
options['truncate_char'] = options.get('truncate_char', '[...]')
5858

59+
indent_columns = options.get('indent_columns', False)
60+
if indent_columns not in [True, False]:
61+
raise SQLParseError('Invalid value for indent_columns: '
62+
'{0!r}'.format(indent_columns))
63+
elif indent_columns:
64+
options['reindent'] = True # enforce reindent
65+
options['indent_columns'] = indent_columns
66+
5967
reindent = options.get('reindent', False)
6068
if reindent not in [True, False]:
6169
raise SQLParseError('Invalid value for reindent: '
@@ -161,6 +169,7 @@ def build_filter_stack(stack, options):
161169
char=options['indent_char'],
162170
width=options['indent_width'],
163171
indent_after_first=options['indent_after_first'],
172+
indent_columns=options['indent_columns'],
164173
wrap_after=options['wrap_after'],
165174
comma_first=options['comma_first']))
166175

0 commit comments

Comments
 (0)