diff options
author | Andi Albrecht <albrecht.andi@gmail.com> | 2018-03-21 19:33:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-21 19:33:01 +0100 |
commit | 396f19d00fa20a8fc891ab9351bee64b334aac3a (patch) | |
tree | dc8e82a7cd831dd038a66a3138eaf8886776896e /sqlparse | |
parent | 9bb8722a66fe19547ea20b3896cbc3088cb0b0ab (diff) | |
parent | ec0af031e646251b91c15761012ede966d455358 (diff) | |
download | sqlparse-396f19d00fa20a8fc891ab9351bee64b334aac3a.tar.gz |
Merge pull request #393 from digitalarbeiter/indent_identifiers
Option: indent all identifiers, including the first one, by width
Diffstat (limited to 'sqlparse')
-rwxr-xr-x | sqlparse/cli.py | 7 | ||||
-rw-r--r-- | sqlparse/filters/reindent.py | 12 | ||||
-rw-r--r-- | sqlparse/formatter.py | 9 |
3 files changed, 25 insertions, 3 deletions
diff --git a/sqlparse/cli.py b/sqlparse/cli.py index f7a3728..14e644b 100755 --- a/sqlparse/cli.py +++ b/sqlparse/cli.py @@ -109,6 +109,13 @@ def create_parser(): help='indent after first line of statement (e.g. SELECT)') group.add_argument( + '--indent_columns', + dest='indent_columns', + action='store_true', + default=False, + help='indent all columns by indent_width instead of keyword length') + + group.add_argument( '-a', '--reindent_aligned', action='store_true', default=False, diff --git a/sqlparse/filters/reindent.py b/sqlparse/filters/reindent.py index 792133f..49c7807 100644 --- a/sqlparse/filters/reindent.py +++ b/sqlparse/filters/reindent.py @@ -12,7 +12,8 @@ from sqlparse.utils import offset, indent class ReindentFilter(object): def __init__(self, width=2, char=' ', wrap_after=0, n='\n', - comma_first=False, indent_after_first=False): + comma_first=False, indent_after_first=False, + indent_columns=False): self.n = n self.width = width self.char = char @@ -20,6 +21,7 @@ class ReindentFilter(object): self.offset = 0 self.wrap_after = wrap_after self.comma_first = comma_first + self.indent_columns = indent_columns self._curr_stmt = None self._last_stmt = None @@ -118,8 +120,12 @@ class ReindentFilter(object): def _process_identifierlist(self, tlist): identifiers = list(tlist.get_identifiers()) - first = next(identifiers.pop(0).flatten()) - num_offset = 1 if self.char == '\t' else self._get_offset(first) + if self.indent_columns: + first = next(identifiers[0].flatten()) + num_offset = 1 if self.char == '\t' else self.width + else: + first = next(identifiers.pop(0).flatten()) + num_offset = 1 if self.char == '\t' else self._get_offset(first) if not tlist.within(sql.Function): with offset(self, num_offset): position = 0 diff --git a/sqlparse/formatter.py b/sqlparse/formatter.py index 6bd8033..ecb1e2f 100644 --- a/sqlparse/formatter.py +++ b/sqlparse/formatter.py @@ -56,6 +56,14 @@ def validate_options(options): options['truncate_strings'] = truncate_strings options['truncate_char'] = options.get('truncate_char', '[...]') + indent_columns = options.get('indent_columns', False) + if indent_columns not in [True, False]: + raise SQLParseError('Invalid value for indent_columns: ' + '{0!r}'.format(indent_columns)) + elif indent_columns: + options['reindent'] = True # enforce reindent + options['indent_columns'] = indent_columns + reindent = options.get('reindent', False) if reindent not in [True, False]: raise SQLParseError('Invalid value for reindent: ' @@ -161,6 +169,7 @@ def build_filter_stack(stack, options): char=options['indent_char'], width=options['indent_width'], indent_after_first=options['indent_after_first'], + indent_columns=options['indent_columns'], wrap_after=options['wrap_after'], comma_first=options['comma_first'])) |