You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
37 lines
1.1 KiB
(*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*)
|
|
|
|
open! IStd
|
|
open Ctl_lexer
|
|
open Lexing
|
|
|
|
let parse_al_file fname channel =
|
|
let parse_with_error lexbuf =
|
|
try Some (Ctl_parser.al_file token lexbuf) with
|
|
| CTLExceptions.ALParserInvariantViolationException s ->
|
|
raise CTLExceptions.(ALFileException (create_exc_info s lexbuf))
|
|
| SyntaxError _ | Ctl_parser.Error ->
|
|
raise CTLExceptions.(ALFileException (create_exc_info "SYNTAX ERROR" lexbuf))
|
|
in
|
|
let lexbuf = Lexing.from_channel channel in
|
|
lexbuf.lex_curr_p <- {lexbuf.lex_curr_p with pos_fname= fname} ;
|
|
parse_with_error lexbuf
|
|
|
|
|
|
let validate_al_files () =
|
|
let validate_al_file fname =
|
|
try
|
|
Utils.with_file_in ~f:(parse_al_file fname) fname |> ignore ;
|
|
None
|
|
with CTLExceptions.ALFileException exc_info -> Some (CTLExceptions.json_of_exc_info exc_info)
|
|
in
|
|
match List.filter_map ~f:validate_al_file Config.linters_def_file with
|
|
| [] ->
|
|
Ok ()
|
|
| _ as errors ->
|
|
Error (Yojson.Basic.to_string (`List errors))
|