12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667(*********************************************************************************)(* Dunolint - A tool to lint and help manage files in dune projects *)(* Copyright (C) 2024-2025 Mathieu Barbin <mathieu.barbin@gmail.com> *)(* *)(* This file is part of Dunolint. *)(* *)(* Dunolint 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. *)(* *)(* Dunolint 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. *)(*********************************************************************************)letsexpable_param(typea)(moduleM:Sexpable.Swithtypet=a)=letmoduleValidate=structtypet=aletof_stringstr=tryOk(Parsexp.Single.parse_string_exnstr|>M.t_of_sexp)with|exn->Error(`Msg(Exn.to_stringexn));;letto_stringt=Sexp.to_string_mach(M.sexp_of_tt)endinCommand.Param.validated_string(moduleValidate);;letbelow~doc=letopenCommand.StdinArg.named_opt["below"](Param.validated_string(moduleRelative_path))~docv:"PATH"~doc;;letskip_subtree~globs=letopenDunolint.Config.Stdincond[(path(or_(List.concat[List.mapglobs~f:glob;List.concat_map~f:(funpat->[glob("**/"^pat);globpat])[".git/";"_build/";"_opam/";"_coverage/";"node_modules/";"doc/build/";".docusaurus/";"*.t/"]])),skip_subtree)];;