I understand there is agreement on using the .clang-format formatting rules 
suggested with [1], which I just merged.

I have formatted the whole source base with clang-format v.15.0.6, in 7 
different PRs [2-8]. I will start merging them tomorrow if there are no 
objections.

I have also filed a PR [9] which adds a CI check for clang-format errors.

Installing clang-format is perhaps most easily done with:
python -m pip install 'clang-format==15.0.6'

Formatting may be done with something like (following works on Mac):
find -E . -regex '.*\.(cpp|hpp|c|h)' -exec clang-format -i {} \+

Contribution rules must be updated, I will start putting up a draft ASAP.
Valuable inspiration may be taken from e.g. GDAL [10] and libtiff [11].

Cheers,
   Nicklas











Add .clang-format:
[1] https://github.com/OSGeo/grass/pull/2272

Format files:
[2] https://github.com/OSGeo/grass/pull/2709
[3] https://github.com/OSGeo/grass/pull/2710
[4] https://github.com/OSGeo/grass/pull/2711
[5] https://github.com/OSGeo/grass/pull/2712
[6] https://github.com/OSGeo/grass/pull/2713
[7] https://github.com/OSGeo/grass/pull/2714
[8] https://github.com/OSGeo/grass/pull/2715

CI check:
[9] https://github.com/OSGeo/grass/pull/2716

[10] https://lists.osgeo.org/pipermail/gdal-dev/2022-December/056658.html
[11] 
https://gitlab.com/libtiff/libtiff/-/merge_requests/431/diffs?commit_id=01cc265a7c7f24de14cda6dc40c960eb8c3c68bb

> On 5 Dec 2022, at 14:06, Nicklas Larsson via grass-dev 
> <grass-dev@lists.osgeo.org> wrote:
> 
> Dear All,
> 
> I have put up a PR [1] with the intent to add a “.clang-format” file and 
> ultimately replace the use of “GNU indent” [2] with ClangFormat [3] for 
> formatting GRASS’ source code. ClangFormat, using the Clang compiler parser, 
> is able to format any valid code in both C and C++. (In contrast to numerous 
> problems and limitations with GNU indent).
> I’ve had the impression that this suggestion in general is a welcome one and 
> not particularly controversial.
> 
> I have initially made the '.clang-format' to mirror as close as possible the 
> settings in 'utils/grass_indent.sh' [4].
> 
> However, I'd like to propose changes to the (ClangFormat’s) 
> “BreakBeforeBraces” rules [5]. The "GRASS"-style is a modified version of the 
> GNU style. I think it would be preferable to simplify these rules with the 
> so-called “Stroustrup” style, which is as close as it gets to K&R (in this 
> regard) and also gives a slightly more compact code vertically. It can be 
> described in short: braces start on new line *only* after functions, and 
> 'else' and 'catch' start on new line after previous closing brace.
> 
> For example:
> 
> int f(void)
> {
>    if (...) {
>        ...
>    }
>    else {
>        ...
>    }
> }
> 
> All other cases -- enums, structs etc. -- attaches the starting brace, e.g.:
> 
> struct s {
>    ...
> }
> 
> 
> Please, check out the formatted example files in the PR [6] to see what the 
> proposed changes would look like with the "Stroustrup" 
> BreakBeforeBraces-rules (note: the PR aims to only add the '.clang-format' 
> file).
> 
> I have intentionally left the setting of "ReflowComments" to the default 
> 'true', which cleverly reformats comments extending the 80 columns. This 
> causes some (aesthetic) issues with trailing Doxygen comments in mainly the 
> in the 'include/grass/ and 'lib/' directories, which probably necessitates 
> some initial manual work. On the other hand, a batch format of all module 
> code will likely go pretty smoothly.
> 
> 
> 
> TO THIS INTENT, to finally solve the long extended problem with -- or lack of 
> -- uniformly formatted code and not kicking this stone further down the road, 
> I suggest the following:
> 
> 
> 1. We adapt the formatting policy using ClangFormat.
> 
> 2. We implement "BreakBeforeBraces" rules according the "Stroustrup" style.
> 
> 3. If there are no objections raised within a two weeks period, say until 
> December 18, either to points 1 and/or 2 or even to this proposed deadline, 
> the PR [1] will be merged and work can start on source code formatting.
> 
> 4. Any changes decided upon ought to be added to 
> https://trac.osgeo.org/grass/wiki/Submitting/C
> 
> 
> 
> Cheers,
> Nicklas
> 
> 
> 
> 
> 
> [1] https://github.com/OSGeo/grass/pull/2272
> [2] https://www.gnu.org/software/indent/
> [3] https://clang.llvm.org/docs/ClangFormat.html
> [4] https://github.com/OSGeo/grass/blob/main/utils/grass_indent.sh
> [5] https://clang.llvm.org/docs/ClangFormatStyleOptions.html
> [6] https://github.com/OSGeo/grass/pull/2272/files
> 
> _______________________________________________
> grass-dev mailing list
> grass-dev@lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/grass-dev

_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to