# Buggy code
def _match(
    self,
    segments,
    match_depth=0,
    parse_depth=0,
    verbosity=0,
    dialect=None,
    match_segment=None,
):
    """A wrapper on the match function to do some basic validation"""
    t0 = get_time()

    if isinstance(segments, BaseSegment):
        segments = (segments,)  # Make into a tuple for compatability
    if not isinstance(segments, tuple):
        logging.warning(
            "{0}.match, was passed {1} rather than tuple or segment".format(
                self.__class__.__name__, type(segments)
            )
        )
        if isinstance(segments, list):
            # Let's make it a tuple for compatibility
            segments = tuple(segments)

    if len(segments) == 0:
        logging.info(
            "{0}.match, was passed zero length segments list. NB: {0} contains {1!r}".format(
                self.__class__.__name__, self._elements
            )
        )

    # Work out the raw representation and curtail if long
    parse_match_logging(
        parse_depth,
        match_depth,
        match_segment,
        self.__class__.__name__,
        "_match",
        "IN",
        verbosity=verbosity,
        v_level=self.v_level,
        le=len(self._elements),
        ls=len(segments),
        seg=join_segments_raw_curtailed(segments),
    )

    m = self.match(
        segments,
        match_depth=match_depth,
        parse_depth=parse_depth,
        verbosity=verbosity,
        dialect=dialect,
        match_segment=match_segment,
    )

    if not isinstance(m, MatchResult):
        logging.warning(
            "{0}.match, returned {1} rather than MatchResult".format(
                self.__class__.__name__, type(m)
            )
        )

    dt = get_time() - t0
    if m.is_complete():
        msg = "OUT ++"
    elif m:
        msg = "OUT -"
    else:
        msg = "OUT"

    parse_match_logging(
        parse_depth,
        match_depth,
        match_segment,
        self.__class__.__name__,
        "_match",
        msg,
        verbosity=verbosity,
        v_level=self.v_level,
        dt=dt,
        m=m,
    )

    # Basic Validation
    check_still_complete(segments, m.matched_segments, m.unmatched_segments)
    return m


# Traceback (TypeError)
Traceback (most recent call last):
File "/home/user/sql/.venv/bin/sqlfluff", line 11, in <module>
load_entry_point('sqlfluff==0.1.3', 'console_scripts', 'sqlfluff')()
File "/home/user/sql/.venv/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/user/sql/.venv/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/user/sql/.venv/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/user/sql/.venv/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/user/sql/.venv/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/cli/commands.py", line 85, in lint
result = lnt.lint_paths(paths, verbosity=verbose)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/linter.py", line 324, in lint_paths
result.add(self.lint_path(path, verbosity=verbosity, fix=fix))
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/linter.py", line 312, in lint_path
linted_path.add(self.lint_file(f, fname=fname, verbosity=verbosity, fix=fix))
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/linter.py", line 212, in lint_file
parsed, vs, time_dict = self.parse_file(f=f, fname=fname, verbosity=verbosity)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/linter.py", line 193, in parse_file
parsed = fs.parse(recurse=recurse, verbosity=verbosity, dialect=self.dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 228, in parse
verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 394, in expand
res = stmt.parse(recurse=recurse, parse_depth=parse_depth, verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 228, in parse
verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 394, in expand
res = stmt.parse(recurse=recurse, parse_depth=parse_depth, verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 228, in parse
verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 394, in expand
res = stmt.parse(recurse=recurse, parse_depth=parse_depth, verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 228, in parse
verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 394, in expand
res = stmt.parse(recurse=recurse, parse_depth=parse_depth, verbosity=verbosity, dialect=dialect)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 186, in parse
dialect=dialect, match_segment=self.__class__.__name__)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 70, in _match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 273, in match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 70, in _match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 485, in match
match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 70, in _match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 273, in match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 70, in _match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 236, in match
dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 361, in _match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/segments_base.py", line 320, in match
dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 70, in _match
verbosity=verbosity, dialect=dialect, match_segment=match_segment)
File "/home/user/sql/.venv/lib/python3.7/site-packages/sqlfluff/parser/grammar.py", line 586, in match
segment=segments[start_bracket_idx])
TypeError: tuple indices must be integers or slices, not NoneType

# Fixed code
def _match(self, segments, parse_context):
    """A wrapper on the match function to do some basic validation"""
    t0 = get_time()

    if isinstance(segments, BaseSegment):
        segments = (segments,)  # Make into a tuple for compatability
    if not isinstance(segments, tuple):
        logging.warning(
            "{0}.match, was passed {1} rather than tuple or segment".format(
                self.__class__.__name__, type(segments)
            )
        )
        if isinstance(segments, list):
            # Let's make it a tuple for compatibility
            segments = tuple(segments)

    if len(segments) == 0:
        logging.info(
            "{0}.match, was passed zero length segments list. NB: {0} contains {1!r}".format(
                self.__class__.__name__, self._elements
            )
        )

    # Work out the raw representation and curtail if long
    parse_match_logging(
        self.__class__.__name__,
        "_match",
        "IN",
        parse_context=parse_context,
        v_level=self.v_level,
        le=len(self._elements),
        ls=len(segments),
        seg=join_segments_raw_curtailed(segments),
    )

    m = self.match(segments, parse_context=parse_context)

    if not isinstance(m, MatchResult):
        logging.warning(
            "{0}.match, returned {1} rather than MatchResult".format(
                self.__class__.__name__, type(m)
            )
        )

    dt = get_time() - t0
    if m.is_complete():
        msg = "OUT ++"
    elif m:
        msg = "OUT -"
    else:
        msg = "OUT"

    parse_match_logging(
        self.__class__.__name__,
        "_match",
        msg,
        parse_context=parse_context,
        v_level=self.v_level,
        dt=dt,
        m=m,
    )

    # Basic Validation
    check_still_complete(segments, m.matched_segments, m.unmatched_segments)
    return m