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
 | 
						|
}' "$@"
 |