def unIndentBlock(block):
            currentIndent = blockIndentation(block)

            if currentIndent.endswith('\t'):
                charsToRemove = 1
            elif withSpace:
                charsToRemove = 1 if currentIndent else 0
            else:
                if self.useTabs:
                    charsToRemove = min(spacesCount(currentIndent), self.width)
                else:  # spaces
                    if currentIndent.endswith(self.text()):  # remove indent level
                        charsToRemove = self.width
                    else:  # remove all spaces
                        charsToRemove = min(spacesCount(currentIndent), self.width)

            if charsToRemove:
                cursor = cursorAtSpaceEnd(block)
                cursor.setPosition(cursor.position() - charsToRemove, QTextCursor.KeepAnchor)
                cursor.removeSelectedText()
def __init__(self, root, cwd, kindpats, ctx=None, badfn=None):
        super(includematcher, self).__init__(root, cwd, badfn)

        # Can we use tree matcher?
        rules = _kindpatstoglobs(kindpats, recursive=True)
        fallback = True
        if rules is not None:
            try:
                matcher = treematcher(root, cwd, badfn=badfn, rules=rules)
                # Replace self to 'matcher'.
                self.__dict__ = matcher.__dict__
                self.__class__ = matcher.__class__
                fallback = False
            except ValueError:
                # for example, Regex("Compiled regex exceeds size limit of 10485760 bytes.")
                pass
        if fallback:
            self._pats, self.matchfn = _buildmatch(ctx, kindpats, "(?:/|$)", root)
            # prefix is True if all patterns are recursive, so certain fast paths
            # can be enabled. Unfortunately, it's too easy to break it (ex. by
            # using "glob:*.c", "re:...", etc).
            self._prefix = _prefix(kindpats)
            roots, dirs = _rootsanddirs(kindpats)
            # roots are directories which are recursively included.
            # If self._prefix is True, then _roots can have a fast path for
            # visitdir to return "all", marking things included unconditionally.
            # If self._prefix is False, then that optimization is unsound because
            # "roots" might contain entries that is not recursive (ex. roots will
            # include "foo/bar" for pattern "glob:foo/bar/*.c").
            self._roots = set(roots)
            # dirs are directories which are non-recursively included.
            # That is, files under that directory are included. But not
            # subdirectories.
            self._dirs = set(dirs)
            # Try to use a more efficient visitdir implementation
            visitdir = _buildvisitdir(kindpats)
            if visitdir:
                self.visitdir = visitdir