diff options
Diffstat (limited to 'sqlparse')
-rw-r--r-- | sqlparse/filters.py | 9 | ||||
-rw-r--r-- | sqlparse/formatter.py | 16 |
2 files changed, 21 insertions, 4 deletions
diff --git a/sqlparse/filters.py b/sqlparse/filters.py index 72f17d0..4cb8a46 100644 --- a/sqlparse/filters.py +++ b/sqlparse/filters.py @@ -279,12 +279,13 @@ class StripWhitespaceFilter: class ReindentFilter: - def __init__(self, width=2, char=' ', line_width=None): + def __init__(self, width=2, char=' ', line_width=None, wrap_after=0): self.width = width self.char = char self.indent = 0 self.offset = 0 self.line_width = line_width + self.wrap_after = wrap_after self._curr_stmt = None self._last_stmt = None @@ -413,8 +414,12 @@ class ReindentFilter: else: num_offset = self._get_offset(first) - len(first.value) self.offset += num_offset + position = self.offset for token in identifiers[1:]: - tlist.insert_before(token, self.nl()) + position += len(token.value) + 1 # Add 1 for the "," separator + if position > self.wrap_after: + tlist.insert_before(token, self.nl()) + position = self.offset self.offset -= num_offset self._process_default(tlist) diff --git a/sqlparse/formatter.py b/sqlparse/formatter.py index ab5f370..05ea327 100644 --- a/sqlparse/formatter.py +++ b/sqlparse/formatter.py @@ -52,6 +52,7 @@ def validate_options(options): % reindent) elif reindent: options['strip_whitespace'] = True + indent_tabs = options.get('indent_tabs', False) if indent_tabs not in [True, False]: raise SQLParseError('Invalid value for indent_tabs: %r' % indent_tabs) @@ -59,15 +60,25 @@ def validate_options(options): options['indent_char'] = '\t' else: options['indent_char'] = ' ' + indent_width = options.get('indent_width', 2) try: indent_width = int(indent_width) except (TypeError, ValueError): raise SQLParseError('indent_width requires an integer') if indent_width < 1: - raise SQLParseError('indent_width requires an positive integer') + raise SQLParseError('indent_width requires a positive integer') options['indent_width'] = indent_width + wrap_after = options.get('wrap_after', 0) + try: + wrap_after = int(wrap_after) + except (TypeError, ValueError): + raise SQLParseError('wrap_after requires an integer') + if wrap_after < 0: + raise SQLParseError('wrap_after requires a positive integer') + options['wrap_after'] = wrap_after + right_margin = options.get('right_margin', None) if right_margin is not None: try: @@ -115,7 +126,8 @@ def build_filter_stack(stack, options): stack.enable_grouping() stack.stmtprocess.append( filters.ReindentFilter(char=options['indent_char'], - width=options['indent_width'])) + width=options['indent_width'], + wrap_after=options['wrap_after'])) if options.get('right_margin', False): stack.enable_grouping() |