diff --git a/hgext/fix.py b/hgext/fix.py --- a/hgext/fix.py +++ b/hgext/fix.py @@ -36,6 +36,15 @@ {first} The 1-based line number of the first line in the modified range {last} The 1-based line number of the last line in the modified range +Deleted sections of a file will be ignored by :linerange, because there is no +corresponding line range in the version being fixed. + +By default, tools that set :linerange will only be executed if there is at least +one changed line range. This is meant to prevent accidents like running a code +formatter in such a way that it unexpectedly reformats the whole file. If such a +tool needs to operate on unchanged files, it should set the :skipclean suboption +to false. + The :pattern suboption determines which files will be passed through each configured tool. See :hg:`help patterns` for possible values. If there are file arguments to :hg:`fix`, the intersection of these patterns is used. @@ -162,6 +171,7 @@ 'pattern': None, 'priority': 0, 'metadata': False, + 'skipclean': True, } for key, default in FIXER_ATTRS.items(): @@ -756,7 +766,7 @@ {'rootpath': path, 'basename': os.path.basename(path)})] if self._linerange: ranges = rangesfn() - if not ranges: + if self._skipclean and not ranges: # No line ranges to fix, so don't run the fixer. return None for first, last in ranges: diff --git a/tests/test-fix.t b/tests/test-fix.t --- a/tests/test-fix.t +++ b/tests/test-fix.t @@ -147,6 +147,15 @@ {first} The 1-based line number of the first line in the modified range {last} The 1-based line number of the last line in the modified range + Deleted sections of a file will be ignored by :linerange, because there is no + corresponding line range in the version being fixed. + + By default, tools that set :linerange will only be executed if there is at + least one changed line range. This is meant to prevent accidents like running + a code formatter in such a way that it unexpectedly reformats the whole file. + If such a tool needs to operate on unchanged files, it should set the + :skipclean suboption to false. + The :pattern suboption determines which files will be passed through each configured tool. See 'hg help patterns' for possible values. If there are file arguments to 'hg fix', the intersection of these patterns is used.