1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859(********************************************************************************)(* crs - A tool for managing code review comments embedded in source code *)(* Copyright (C) 2024-2025 Mathieu Barbin <mathieu.barbin@gmail.com> *)(* *)(* This file is part of crs. *)(* *)(* crs is free software; you can redistribute it and/or modify it under the *)(* terms of the GNU Lesser General Public License as published by the Free *)(* Software Foundation either version 3 of the License, or any later version, *)(* with the LGPL-3.0 Linking Exception. *)(* *)(* crs is distributed in the hope that it will be useful, but WITHOUT ANY *)(* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS *)(* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License and *)(* the file `NOTICE.md` at the root of this repository for more details. *)(* *)(* You should have received a copy of the GNU Lesser General Public License *)(* and the LGPL-3.0 Linking Exception along with this library. If not, see *)(* <http://www.gnu.org/licenses/> and <https://spdx.org>, respectively. *)(********************************************************************************)letmain=Command.make~summary:"Output Reviewdog Annotations for CRs in the repo."~readme:(fun()->"This command searches for CRs in the tree and prints Reviewdog Annotations for \
them to $(b,stdout) in $(b,rdjson) format for use in CIs.")(letopenCommand.Stdinlet+with_user_mentions=Common_helpers.with_user_mentions_argand+config=Arg.named_opt["config"]Param.file~doc:"Config file to customize crs."and+review_mode=Review_mode.arg~emit_github_annotations:trueinletcwd=Unix.getcwd()|>Absolute_path.vinlet{Enclosing_repo.vcs_kind=_;repo_root;vcs}=Common_helpers.find_enclosing_repo~from:cwdinletconfig=matchconfigwith|None->Config.empty|Somepath->Config.load_exn~path:(Fpath.vpath)~emit_github_annotations:trueinletcrs=Crs_parser.grep~vcs~repo_root~below:Vcs.Path_in_repo.root|>Cr_comment.sortinletdiagnostics=List.filter_mapcrs~f:(funcr->Annotation.of_cr~cr~config~review_mode~with_user_mentions|>Option.map~f:Annotation.to_reviewdog_diagnostic)inletdiagnostic_result={Reviewdog.Diagnostic_result.source=SomeReviewdog_utils.source;severity=SomeInfo;diagnostics}inletjson=Reviewdog.Diagnostic_result.to_yojsondiagnostic_resultinprint_endline(Yojson.Safe.pretty_to_string~std:truejson);());;