53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| 
								 | 
							
								# ===-------------------------- utils.py - Utility ------------------------===//
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Copyright 2019-2020 The IBM Research Authors.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# =============================================================================
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# ===----------------------------------------------------------------------===//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import logging
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								logger = logging.getLogger('doc-check')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from doc_parser import *
							 | 
						||
| 
								 | 
							
								from utils import *
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def parse(line, directive_configs):
							 | 
						||
| 
								 | 
							
								    directive_configs.append({'ref': line})
							 | 
						||
| 
								 | 
							
								    return success()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def handle(config, ctx):
							 | 
						||
| 
								 | 
							
								    logger.debug("Handling a same-as-file directive with config {}".format(config))
							 | 
						||
| 
								 | 
							
								    ref_file_path = config["ref"]
							 | 
						||
| 
								 | 
							
								    doc_file = ctx.doc_file
							 | 
						||
| 
								 | 
							
								    parse_code_section_delimiter(ctx)
							 | 
						||
| 
								 | 
							
								    with WrappedFile(open(
							 | 
						||
| 
								 | 
							
								            os.path.join(ctx.root_dir, ref_file_path))) as ref_file:
							 | 
						||
| 
								 | 
							
								        doc_file.skip_lines(config.get("skip-doc", 0))
							 | 
						||
| 
								 | 
							
								        ref_file.skip_lines(config.get("skip-ref", 0))
							 | 
						||
| 
								 | 
							
								        while not ref_file.eof():
							 | 
						||
| 
								 | 
							
								            ref_line = ref_file.readline().rstrip('\r\n')
							 | 
						||
| 
								 | 
							
								            doc_line = doc_file.readline().rstrip('\r\n')
							 | 
						||
| 
								 | 
							
								            loc = (doc_file.f.name, doc_file.line,
							 | 
						||
| 
								 | 
							
								                   ref_file_path, ref_file.line)
							 | 
						||
| 
								 | 
							
								            loc_info = "\ndoc file {}, line no. {}. ref file {}, line no. {}.".format(*loc)
							 | 
						||
| 
								 | 
							
								            if doc_file.eof():
							 | 
						||
| 
								 | 
							
								                raise ValueError("Check failed because doc file is "
							 | 
						||
| 
								 | 
							
								                                 "shorter than reference file." + loc_info)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if ref_line != doc_line:
							 | 
						||
| 
								 | 
							
								                doc_line_info = "\nDoc line      : {}".format(doc_line)
							 | 
						||
| 
								 | 
							
								                ref_line_info = "\nReference line: {}".format(ref_line)
							 | 
						||
| 
								 | 
							
								                raise ValueError(
							 | 
						||
| 
								 | 
							
								                    "Check failed because doc file content is not "
							 | 
						||
| 
								 | 
							
								                    "the same as that of reference file." +
							 | 
						||
| 
								 | 
							
								                    doc_line_info + ref_line_info)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    parse_code_section_delimiter(ctx)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ext_to_patterns = {'.md': '\\[same-as-file\\]: <> \\(([^)]*)\\)'}
							 |