pylint/checkers/format.py
def check_lines(self, lines, i):
        """check lines have less than a maximum number of characters
        """
        max_chars = self.config.max_line_length
        ignore_long_line = self.config.ignore_long_lines

        def check_line(line, i):
            if not line.endswith("\n"):
                self.add_message("missing-final-newline", line=i)
            else:
                # exclude \f (formfeed) from the rstrip
                stripped_line = line.rstrip("\t\n\r\v ")
                if not stripped_line and _EMPTY_LINE in self.config.no_space_check:
                    # allow empty lines
                    pass
                elif line[len(stripped_line) :] not in ("\n", "\r\n"):
                    self.add_message(
                        "trailing-whitespace", line=i, col_offset=len(stripped_line)
                    )
                # Don't count excess whitespace in the line length.
                line = stripped_line
            mobj = OPTION_RGX.search(line)
            if mobj and "=" in line:
                front_of_equal, _, back_of_equal = mobj.group(1).partition("=")
                if front_of_equal.strip() == "disable":
                    if "line-too-long" in {
                        _msg_id.strip() for _msg_id in back_of_equal.split(",")
                    }:
                        return None
                    line = line.rsplit("#", 1)[0].rstrip()

            if len(line) > max_chars and not ignore_long_line.search(line):
                self.add_message("line-too-long", line=i, args=(len(line), max_chars))
            return i + 1

        unsplit_ends = {
            "\v",
            "\x0b",
            "\f",
            "\x0c",
            "\x1c",
            "\x1d",
            "\x1e",
            "\x85",
            "\u2028",
            "\u2029",
        }
        unsplit = []
        for line in lines.splitlines(True):
            if line[-1] in unsplit_ends:
                unsplit.append(line)
                continue

            if unsplit:
                unsplit.append(line)
                line = "".join(unsplit)
                unsplit = []

            i = check_line(line, i)
            if i is None:
                break

        if unsplit:
            check_line("".join(unsplit), i)
def check_lines(self, lines, i):
        max_chars = self.config.max_line_length
        ignore_long_line = self.config.ignore_long_lines

        def check_line(line, i):
            if not line.endswith("\n"):
                self.add_message("missing-final-newline", line=i)
            else:
                # exclude \f (formfeed) from the rstrip
                stripped_line = line.rstrip("\t\n\r\v ")
                if not stripped_line and _EMPTY_LINE in self.config.no_space_check:
                    # allow empty lines
                    pass
                elif line[len(stripped_line) :] not in ("\n", "\r\n"):
                    self.add_message(
                        "trailing-whitespace", line=i, col_offset=len(stripped_line)
                    )
                # Don't count excess whitespace in the line length.
                line = stripped_line
            mobj = OPTION_RGX.search(line)
            if mobj and "=" in line:
                front_of_equal, _, back_of_equal = mobj.group(1).partition("=")
                if front_of_equal.strip() == "disable":
                    if "line-too-long" in {
                        _msg_id.strip() for _msg_id in back_of_equal.split(",")
                    }:
                        return None
                    line = line.rsplit("#", 1)[0].rstrip()

            if len(line) > max_chars and not ignore_long_line.search(line):
                self.add_message("line-too-long", line=i, args=(len(line), max_chars))
            return i + 1

        unsplit_ends = {
            "\v",
            "\x0b",
            "\f",
            "\x0c",
            "\x1c",
            "\x1d",
            "\x1e",
            "\x85",
            "\u2028",
            "\u2029",
        }
        unsplit = []
        for line in lines.splitlines(True):
            if line[-1] in unsplit_ends:
                unsplit.append(line)
                continue

            if unsplit:
                unsplit.append(line)
                line = "".join(unsplit)
                unsplit = []

            i = check_line(line, i)
            if i is None:
                break

        if unsplit:
            check_line("".join(unsplit), i)
def check_lines ( self , lines , i ) : max_chars = self . config . max_line_length ignore_long_line = self . config . ignore_long_lines def check_line ( line , i ) : if not line . endswith ( "\n" ) : self . add_message ( "missing-final-newline" , line = i ) else : # exclude \f (formfeed) from the rstrip stripped_line = line . rstrip ( "\t\n\r\v " ) if not stripped_line and _EMPTY_LINE in self . config . no_space_check : # allow empty lines pass elif line [ len ( stripped_line ) : ] not in ( "\n" , "\r\n" ) : self . add_message ( "trailing-whitespace" , line = i , col_offset = len ( stripped_line ) ) # Don't count excess whitespace in the line length. line = stripped_line mobj = OPTION_RGX . search ( line ) if mobj and "=" in line : front_of_equal , _ , back_of_equal = mobj . group ( 1 ) . partition ( "=" ) if front_of_equal . strip ( ) == "disable" : if "line-too-long" in { _msg_id . strip ( ) for _msg_id in back_of_equal . split ( "," ) } : return None line = line . rsplit ( "#" , 1 ) [ 0 ] . rstrip ( ) if len ( line ) > max_chars and not ignore_long_line . search ( line ) : self . add_message ( "line-too-long" , line = i , args = ( len ( line ) , max_chars ) ) return i + 1 unsplit_ends = { "\v" , "\x0b" , "\f" , "\x0c" , "\x1c" , "\x1d" , "\x1e" , "\x85" , "\u2028" , "\u2029" , } unsplit = [ ] for line in lines . splitlines ( True ) : if line [ - 1 ] in unsplit_ends : unsplit . append ( line ) continue if unsplit : unsplit . append ( line ) line = "" . join ( unsplit ) unsplit = [ ] i = check_line ( line , i ) if i is None : break if unsplit : check_line ( "" . join ( unsplit ) , i )
check lines have less than a maximum number of characters
check lines have less than a maximum number of characters