[PATCH] D93528: [clang-format] Add basic support for formatting JSON

MyDeveloperDay via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Dec 18 02:32:20 PST 2020


MyDeveloperDay created this revision.
MyDeveloperDay added reviewers: curdeius, krasimir, klimek, sammccall, benhamilton.
MyDeveloperDay added projects: clang, clang-format.
Herald added a subscriber: mgorny.
MyDeveloperDay requested review of this revision.

I find as I develop I'm moving between many different languages C++,C#,JavaScript all the time. As I move between the file types I like to keep `clang-format` as my formatting tool of choice. (hence why I initially added C# support  in D58404: [clang-format] Add basic support for formatting C# files <https://reviews.llvm.org/D58404>) I know those other languages have their own tools but I have to learn them all, and I have to work out how to configure them, and they may or may not have integration into my IDE or my source code integration.

I am increasingly finding that I'm editing additional JSON files as part of my daily work and my editor and git commit hooks are just not setup to go and run jq <https://stedolan.github.io/jq/>, So I tend to go to  JSON Formatter <https://jsonformatter.curiousconcept.com/> and copy and paste back and forth. To get nicely formatted JSON. This is a painful process and I'd like a new one that causes me much less friction.

This has come up from time to time:

D10543: clang-format: [JS] recognize .ts and .json in git-clang-format. <https://reviews.llvm.org/D10543>
https://stackoverflow.com/questions/35856565/clang-format-a-json-file

I would like to stop having to do that and have formatting JSON as a first class clang-format support `Language` (even if it has minimal style settings at present).

This revision adds support for formatting JSON using the inbuilt JSON serialization library of LLVM, With limited control at present only over the indentation level

This adds an additional Language into the .clang-format file to separate the settings from your other supported languages.

  -- 
  Language: Json
  IndentWidth: 2

For example of it working, this snipped from the Wikipedia definition of JSON can be formatted as below without the need to trick clang-format into thinking this is javascript:

file.json

  { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 27, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spouse": null }



  $ clang-format.exe file.json
  {
    "address": {
      "city": "New York",
      "postalCode": "10021-3100",
      "state": "NY",
      "streetAddress": "21 2nd Street"
    },
    "age": 27,
    "children": [],
    "firstName": "John",
    "isAlive": true,
    "lastName": "Smith",
    "phoneNumbers": [
      {
        "number": "212 555-1234",
        "type": "home"
      },
      {
        "number": "646 555-4567",
        "type": "office"
      }
    ],
    "spouse": null
  }




Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D93528

Files:
  clang/docs/ClangFormat.rst
  clang/docs/ClangFormatStyleOptions.rst
  clang/docs/ReleaseNotes.rst
  clang/include/clang/Format/Format.h
  clang/lib/Format/Format.cpp
  clang/tools/clang-format/ClangFormat.cpp
  clang/unittests/Format/CMakeLists.txt
  clang/unittests/Format/FormatTestJson.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D93528.312728.patch
Type: text/x-patch
Size: 9306 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201218/f00281bd/attachment.bin>


More information about the cfe-commits mailing list