 6afeb39713
			
		
	
	
		6afeb39713
		
	
	
	
	
		
			
			Since we're adding checkpatch rules to enforce 4-line multiline comment format, i.e. with lone /* and */, this script can be run on existing code so that the comment style does not become inconsistent within a file. The alternative to awk-in-a-shell-script could be Perl, which also supports -i directly, but a2p seems to have bitrotten and I didn't quite feel like writing this twice... Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #! /bin/sh
 | |
| #
 | |
| # Fix multiline comments to match CODING_STYLE
 | |
| #
 | |
| # Copyright (C) 2018 Red Hat, Inc.
 | |
| #
 | |
| # Author: Paolo Bonzini
 | |
| #
 | |
| # Usage: scripts/fix-multiline-comments.sh [-i] FILE...
 | |
| #
 | |
| # -i edits the file in place (requires gawk 4.1.0).
 | |
| #
 | |
| # Set the AWK environment variable to choose the awk interpreter to use
 | |
| # (default 'awk')
 | |
| 
 | |
| if test "$1" = -i; then
 | |
|   # gawk extension
 | |
|   inplace="-i inplace"
 | |
|   shift
 | |
| fi
 | |
| ${AWK-awk} $inplace 'BEGIN { indent = -1 }
 | |
| {
 | |
|     line = $0
 | |
|     # apply a star to the indent on lines after the first
 | |
|     if (indent != -1) {
 | |
|         if (line == "") {
 | |
|             line = sp " *"
 | |
|         } else if (substr(line, 1, indent + 2) == sp "  ") {
 | |
|             line = sp " *" substr(line, indent + 3)
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     is_lead = (line ~ /^[ \t]*\/\*/)
 | |
|     is_trail = (line ~ /\*\//)
 | |
|     if (is_lead && !is_trail) {
 | |
|         # grab the indent at the start of a comment, but not for
 | |
|         # single-line comments
 | |
|         match(line, /^[ \t]*\/\*/)
 | |
|         indent = RLENGTH - 2
 | |
|         sp = substr(line, 1, indent)
 | |
|     }
 | |
| 
 | |
|     # the regular expression filters out lone /*, /**, or */
 | |
|     if (indent != -1 && !(line ~ /^[ \t]*(\/\*+|\*\/)[ \t]*$/)) {
 | |
|         if (is_lead) {
 | |
|             # split the leading /* or /** on a separate line
 | |
|             match(line, /^[ \t]*\/\*+/)
 | |
|             lead = substr(line, 1, RLENGTH)
 | |
|             match(line, /^[ \t]*\/\*+[ \t]*/)
 | |
|             line = lead "\n" sp " *" substr(line, RLENGTH)
 | |
|         }
 | |
|         if (is_trail) {
 | |
|             # split the trailing */ on a separate line
 | |
|             match(line, /[ \t]*\*\//)
 | |
|             line = substr(line, 1, RSTART - 1) "\n" sp " */"
 | |
|         }
 | |
|     }
 | |
|     if (is_trail) {
 | |
|         indent = -1
 | |
|     }
 | |
|     print line
 | |
| }' "$@"
 |