Summary: In case of syntax errors in AL files, stdout will contain a JSON list with all files affected by the errors, including info like filename and line number. Reviewed By: dulmarod, jvillard Differential Revision: D5640272 fbshipit-source-id: 569b16dmaster
							parent
							
								
									3576f2f7cc
								
							
						
					
					
						commit
						e8a0599850
					
				| @ -0,0 +1,37 @@ | |||||||
|  | (* | ||||||
|  |  * Copyright (c) 2017 - present Facebook, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * This source code is licensed under the BSD style license found in the | ||||||
|  |  * LICENSE file in the root directory of this source tree. An additional grant | ||||||
|  |  * of patent rights can be found in the PATENTS file in the same directory. | ||||||
|  |  *) | ||||||
|  | 
 | ||||||
|  | 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)) | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | (* | ||||||
|  |  * Copyright (c) 2017 - present Facebook, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * This source code is licensed under the BSD style license found in the | ||||||
|  |  * LICENSE file in the root directory of this source tree. An additional grant | ||||||
|  |  * of patent rights can be found in the PATENTS file in the same directory. | ||||||
|  |  *) | ||||||
|  | 
 | ||||||
|  | open! IStd | ||||||
|  | 
 | ||||||
|  | val parse_al_file : string -> In_channel.t -> CTL.al_file option | ||||||
|  | 
 | ||||||
|  | val validate_al_files : unit -> (unit, string) Result.t | ||||||
| @ -0,0 +1,10 @@ | |||||||
|  | (* | ||||||
|  |  * Copyright (c) 2017 - present Facebook, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * This source code is licensed under the BSD style license found in the | ||||||
|  |  * LICENSE file in the root directory of this source tree. An additional grant | ||||||
|  |  * of patent rights can be found in the PATENTS file in the same directory. | ||||||
|  |  *) | ||||||
|  | 
 | ||||||
|  | let validate_al_files () = prerr_endline "ERROR: infer was built without clang support." ; exit 1 | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | (* | ||||||
|  |  * Copyright (c) 2016 - present Facebook, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * This source code is licensed under the BSD style license found in the | ||||||
|  |  * LICENSE file in the root directory of this source tree. An additional grant | ||||||
|  |  * of patent rights can be found in the PATENTS file in the same directory. | ||||||
|  |  *) | ||||||
|  | 
 | ||||||
|  | open! IStd | ||||||
|  | 
 | ||||||
|  | val validate_al_files : unit -> (unit, string) Result.t | ||||||
					Loading…
					
					
				
		Reference in new issue