[GRASS-dev] Proposal for using ClangFormat, replacing GNU indent, for C/C++ code formatting

Even Rouault even.rouault at spatialys.com
Mon Jan 2 10:44:39 PST 2023


I'd suggest you use pre-commit so that clang-format is automatically run 
on git commit operations like we have done with GDAL. Then it is a 
no-brainer to do changes.

You need to add a .pre-commit-config.yaml at the root of the repository 
(only the part referencing clang-format at 
https://github.com/OSGeo/gdal/blob/master/.pre-commit-config.yaml#L30 is 
relevant for you):

https://github.com/OSGeo/gdal/blob/master/.pre-commit-config.yaml

Once that file is in place:

-  "pip install pre-commit" : just once

- "pre-commit install": just once per repository

Cf https://gdal.org/development/dev_practices.html#commit-hooks

Even

Le 02/01/2023 à 19:20, Nicklas Larsson via grass-dev a écrit :
> Markus,
>
>
>> On 2 Jan 2023, at 13:48, Markus Neteler <neteler at osgeo.org> wrote:
>>
>> Hi Nicklas,
>>
>> On Wed, Dec 21, 2022 at 9:25 PM Nicklas Larsson via grass-dev
>> <grass-dev at lists.osgeo.org> wrote:
>>>
>>> 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.
>>
>> Thanks for your efforts on the code reformatting!
>
> :-)
>
>>
>>> 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 {} \+
>>
>> ... it fails on Linux, though
>>
>> find: unknown predicate `-E')
>
>
> I was pretty sure this would deviate from Mac/BSD on Linux systems:
>
>
> Try something like (untested):
>
> find . -regex '.*\.(cpp|hpp|c|h)' -exec clang-format -i {} \;
>
> or manually with:
> clang-format -I <file>
>
>
>>
>>> Contribution rules must be updated, I will start putting up a draft 
>>> ASAP.
>>
>> I am trying to fix the conflicts in
>> https://github.com/OSGeo/grass/pull/2684
>>
>> Conflicting files:
>>
>> include/grass/iostream/mm.h
>> lib/db/dbmi_base/dbmscap.c
>> lib/external/ccmath/ccmath.h
>> lib/gis/spawn.c
>> lib/gis/user_config.c
>> lib/iostream/rtimer.cpp
>> lib/pngdriver/graph_set.c
>> lib/rst/interp_float/point2d.c
>> raster/r.terraflow/filldepr.cpp
>> raster/r.terraflow/flow.cpp
>> raster/r.terraflow/main.cpp
>> raster/r.viewshed/statusstructure.cpp
>>
>> The reason will be the missing clang-format update which I don't know
>> how to apply on Linux.
>
> Not quite sure what you mean. Did you try:
>
> python -m pip install 'clang-format==15.0.6’
>
> But I suspect any version 15 will do, perhaps even v. 14.
>
>
> A tip to use the .clang-format file from main for branches without it:
>
> 1. git checkout main
> 2. cp .clang-forrmat ../.clang-format
> 3. check out branch
> 4. clang-format searches upwards in dir hierarchy  for next 
> ‘.clang-format’ file
> 5. run clang-format from grass source dir
>
>
>
> _______________________________________________
> grass-dev mailing list
> grass-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/grass-dev

-- 
http://www.spatialys.com
My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20230102/f11037b4/attachment-0001.htm>


More information about the grass-dev mailing list