github.com/vmware/go-vmware-nsxt@v0.0.0-20230223012718-d31b8a1ca05e/tools/goclone.py (about)

     1  import re
     2  import sys
     3  
     4  def main():
     5      if len(sys.argv) != 6:
     6          print("Usage: %s <filename> <func to replicate> <new func name> <replace what> <replace with>" % sys.argv[0])
     7          sys.exit(0)
     8  
     9      filename = sys.argv[1]
    10      func = sys.argv[2]
    11      new_func = sys.argv[3]
    12      what = sys.argv[4]
    13      to = sys.argv[5]
    14  
    15      with open(filename, 'r') as f:
    16          lines = f.readlines()
    17  
    18      lines_before_func = []
    19      lines_after_func = []
    20      bunch = []
    21      func_started = False
    22      func_ended = False
    23      for line in lines:
    24          if func_ended:
    25              lines_after_func.append(line)
    26              continue
    27  
    28          if line[:2] == '/*' and not func_started:
    29              lines_before_func.extend(bunch)
    30              bunch = [line]
    31          else:
    32              bunch.append(line)
    33  
    34          if re.match("func .+ %s" % func, line):
    35              func_started = True
    36  
    37          if func_started and line[:1] == '}':
    38              func_ended = True
    39  
    40  
    41      output = lines_before_func
    42      output.extend(bunch)
    43      output.append('\n')
    44      for line in bunch:
    45          replaced = re.sub('\\b' + what + '\\b', to, line)
    46          output.append(re.sub('\\b' + func + '\\b', new_func, replaced))
    47  
    48      output.extend(lines_after_func)
    49  
    50      for line in output:
    51          print(line[:-1])
    52  
    53  main()