Note:
This page is primarily intended for developers of Mercurial.
Unifying Fix and FormatSource Extensions
Status: Project
Main proponents: DannyHooper and Pierre-YvesDavid
Source formatting is great and a trending topic. There are multiples associated issues. The fix extensions deal with a subset of these issue and the format-source extensions deal with another subset (with some overlap).
We should have a single extension dealing with all issues.
1. Goal
There is three main issue with source formatting:
- Applying formatting in your working copy
- Applying formatting on content of existing draft changesets
- Applying formatting change during merge // minimizing conflict that are purely formatting.
fix deals with the first 2; Format source deals with the first and the last. We want a unified approache using common code, common config and common UX/UI.
2. Detailed description
2.1. config
idea |
fix |
format source |
proposal |
command line |
fix.TOOL:command ({rootpath}) |
format-source.TOOL ($HG_FILENAME) |
|
line range flag |
fix.TOOL:linerange ({first}:{last}) |
ø |
|
|
fix.TOOL:skipclean=BOOL |
ø |
|
pattern to format |
fix.TOOL:pattern |
in .hg-format-source |
|
tool priority |
fix.TOOL:priority |
ø |
|
metadata (strange) |
fix.TOOL:metadata=BOOL |
ø |
|
mode |
ø |
format-source.TOOL:mode={pipe/file} |
|
(input mode) |
ø |
format-source.TOOL:mode.input={pipe/file} |
|
(output mode) |
ø |
format-source.TOOL:mode.output={pipe/file} |
|
tool version |
ø |
format-source.TOOL:version-command |
|
version format |
ø |
format-source.TOOL:version-regex |
|
path of default config files |
ø |
format-source.TOOL:configpaths=[] |
|
(format-sources also have a global run-mode config)
In addition, format-source comes with default definition for common tools.
2.2. user interface
Regarding command:
hg fix -w [--whole] == hg format-source --current
hg fix --rev REV [--whole] rewrite changesets (involved flag -rev, --base --all)
hg format-source TOOL PATTERN [--extra-config-file] create a new changeset (involved -m, -u, -d, -l
3. Roadmap
- decide on config
- decide on UI
- decide on "in repo" format
- write a common library
- write final commands
- put this in core ?
- ...
- profit