from pylint.checkers import BaseChecker
from pylint.interfaces import IRawChecker


class MyRawChecker(BaseChecker):
    """check for line continuations with '\' instead of using triple
    quoted string or parenthesis
    """

    __implements__ = IRawChecker

    name = "custom_raw"
    msgs = {
        "W9901": (
            "use \\ for line continuation",
            "backslash-line-continuation",
            (
                "Used when a \\ is used for a line continuation instead"
                " of using triple quoted string or parenthesis."
            ),
        )
    }
    options = ()

    def process_module(self, node):
        """process a module

        the module's content is accessible via node.stream() function
        """
        with node.stream() as stream:
            for (lineno, line) in enumerate(stream):
                if line.rstrip().endswith("\\"):
                    self.add_message("backslash-line-continuation", line=lineno)


def register(linter):
    """required method to auto register this checker"""
    linter.register_checker(MyRawChecker(linter))
