)]}'
{
  "commit": "81418ada06abbeba9fd0ea17282cce542cd07706",
  "tree": "2613baa8d1fe7ffe926e7044b51f474077819e1a",
  "parents": [
    "2ae8a4a17888f739c1082f52eed56887c2004908"
  ],
  "author": {
    "name": "Mike Crowe",
    "email": "mac@mcrowe.com",
    "time": "Sun Jun 25 17:38:09 2023 +0000"
  },
  "committer": {
    "name": "Piotr Zegar",
    "email": "me@piotrzegar.pl",
    "time": "Sun Jun 25 18:41:55 2023 +0000"
  },
  "message": "[clang-tidy] Add modernize-printf-to-std-print check\n\nAdd FormatStringConverter utility class that is capable of converting\nprintf-style format strings into std::print-style format strings along\nwith recording a set of casts to wrap the arguments as required and\nremoving now-unnecessary calls to std::string::c_str() and\nstd::string::data()\n\nUse FormatStringConverter to implement a new clang-tidy check that is\ncapable of converting calls to printf, fprintf, absl::PrintF,\nabsl::FPrintF, or any functions configured by an option to calls to\nstd::print and std::println, or other functions configured by options.\n\nIn other words, the check turns:\n\n fprintf(stderr, \"The %s is %3d\\n\", description.c_str(), value);\n\ninto:\n\n std::println(stderr, \"The {} is {:3}\", description, value);\n\nif it can.\n\nstd::print and std::println can do almost anything that standard printf\ncan, but the conversion has some some limitations that are described in\nthe documentation. If conversion is not possible then the call remains\nunchanged.\n\nDepends on D153716\n\nReviewed By: PiotrZSL\n\nDifferential Revision: https://reviews.llvm.org/D149280\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "91e2d8d5ee4e55f950d0cdf9453abe9a58a291fa",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/clang-tidy/modernize/CMakeLists.txt",
      "new_id": "ef10cb0e388264ab412fb1e20f0496aa540fb0f0",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/modernize/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "ee0fab18d2068c17a56d649a138027612ad5128c",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp",
      "new_id": "9bbc4dc50ec0e474081facc8fa6e59e750c9793f",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9b368f9a3e6c94e7ffe241cb735001cdf54e6e44",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/modernize/UseStdPrintCheck.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7a06cf38b4264fa8dc0df13c8f0e37ebb79015df",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/modernize/UseStdPrintCheck.h"
    },
    {
      "type": "modify",
      "old_id": "50d1cf812b69094b8650b746d6d5a41df17afd6d",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/clang-tidy/utils/CMakeLists.txt",
      "new_id": "6c7d52a4b1873fd0adf879048c046b5357961fe1",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/utils/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "624bc917ac9379b0cc4b7366800efc1f526494d3",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/utils/FormatStringConverter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b246013c24c457e9e462ace74ff3db0347accbc8",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/clang-tidy/utils/FormatStringConverter.h"
    },
    {
      "type": "modify",
      "old_id": "03426772f603769ea1045a775de0aebc166ca621",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/docs/ReleaseNotes.rst",
      "new_id": "726ec41f6a7369995eccfef2e4b0aa71d1f3c7f9",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/docs/ReleaseNotes.rst"
    },
    {
      "type": "modify",
      "old_id": "552d1c40c25b85f9d2f0616c3c6ba324ea5fff3f",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/docs/clang-tidy/checks/list.rst",
      "new_id": "966e98672e0fb5b33043c5102699f8c7134697e9",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/docs/clang-tidy/checks/list.rst"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "385ee35c4f8f8afba104b30201aa4f68bf63f833",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/docs/clang-tidy/checks/modernize/use-std-print.rst"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "800285e887cdab43d1ee2f3db5f14b2941756f5e",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/cstddef"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2029eb90dcb8739cfe48f1826e45f7a5150cebe4",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/cstdint"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5024529f96da67d0358fd7ec43137e4508e28309",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/cstdio"
    },
    {
      "type": "modify",
      "old_id": "eebe9fd914ad0ce9893679affb3f7d058f2d10dd",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/stdio.h",
      "new_id": "803abfdd590f70c26437fc3bebd66ceeaaa90d3e",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/stdio.h"
    },
    {
      "type": "modify",
      "old_id": "931fcf36345a5c05ce1e639e815489ed4074e972",
      "old_mode": 33188,
      "old_path": "clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string.h",
      "new_id": "4ab7e930e4b5067f1b87529a5a9b3378a4bb59eb",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "53453800283093fd8be9b4533e1e9b4c3dc24860",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-print-absl.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "08779837c75e7341414c607c8e9ef4307d3a4611",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-print-custom.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "81a5631fd9d84076089462eb56d45bee2893b040",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-print-fmt.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2c7cc6263d7eaaa71e7dbca133d1825dbc329ade",
      "new_mode": 33188,
      "new_path": "clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-print.cpp"
    }
  ]
}
