@@ -672,50 +672,65 @@ for root, dirs, files in os.walk(src_dir):
672672 new_lines = []
673673 i = 0
674674 while i < len(lines):
675- # Pattern: $FlowFixMe[...], then eslint-disable-next-line, then code
675+ # Pattern: eslint-disable-next-line, then one or more $FlowFixMe[...] , then code
676676 if (i + 2 < len(lines) and
677- '$FlowFixMe[' in lines[i] and
678- 'eslint-disable-next-line' in lines[i + 1]):
679- m = re.search(r'eslint-disable-next-line\s+(.+)', lines[i + 1])
680- if m:
681- rule = m.group(1).strip()
682- indent = ''
683- for ch in lines[i + 2]:
684- if ch in (' ', '\t'):
685- indent += ch
686- else:
687- break
688- # Use eslint-disable/enable block instead
689- new_lines.append(f'{indent}/* eslint-disable {rule} */\n')
690- new_lines.append(lines[i]) # Keep $FlowFixMe
691- new_lines.append(lines[i + 2]) # Keep code
692- new_lines.append(f'{indent}/* eslint-enable {rule} */\n')
693- i += 3
694- modified = True
695- fixed += 1
696- continue
697- # Pattern: eslint-disable-next-line, then $FlowFixMe[...], then code
698- elif (i + 2 < len(lines) and
699677 'eslint-disable-next-line' in lines[i] and
700678 '$FlowFixMe[' in lines[i + 1]):
701679 m = re.search(r'eslint-disable-next-line\s+(.+)', lines[i])
702680 if m:
703681 rule = m.group(1).strip()
704- indent = ''
705- for ch in lines[i + 2]:
706- if ch in (' ', '\t'):
707- indent += ch
708- else:
709- break
710- # Use eslint-disable/enable block instead
711- new_lines.append(f'{indent}/* eslint-disable {rule} */\n')
712- new_lines.append(lines[i + 1]) # Keep $FlowFixMe
713- new_lines.append(lines[i + 2]) # Keep code
714- new_lines.append(f'{indent}/* eslint-enable {rule} */\n')
715- i += 3
716- modified = True
717- fixed += 1
718- continue
682+ # Collect all consecutive FlowFixMe lines
683+ fixme_lines = []
684+ j = i + 1
685+ while j < len(lines) and '$FlowFixMe[' in lines[j]:
686+ fixme_lines.append(lines[j])
687+ j += 1
688+ if j < len(lines):
689+ code_line = lines[j]
690+ indent = ''
691+ for ch in code_line:
692+ if ch in (' ', '\t'):
693+ indent += ch
694+ else:
695+ break
696+ # Use eslint-disable/enable block wrapping FlowFixMe + code
697+ new_lines.append(f'{indent}/* eslint-disable {rule} */\n')
698+ for fl in fixme_lines:
699+ new_lines.append(fl)
700+ new_lines.append(code_line)
701+ new_lines.append(f'{indent}/* eslint-enable {rule} */\n')
702+ i = j + 1
703+ modified = True
704+ fixed += 1
705+ continue
706+ # Pattern: one or more $FlowFixMe[...], then eslint-disable-next-line, then code
707+ elif (i + 2 < len(lines) and
708+ '$FlowFixMe[' in lines[i] and
709+ 'eslint-disable-next-line' in lines[i + 1]):
710+ # Find where the FlowFixMe block starts
711+ fixme_start = i
712+ # The eslint line is after one FlowFixMe; collect FlowFixMe after it too
713+ m = re.search(r'eslint-disable-next-line\s+(.+)', lines[i + 1])
714+ if m:
715+ rule = m.group(1).strip()
716+ j = i + 2
717+ # Code line is right after eslint-disable-next-line
718+ if j < len(lines):
719+ code_line = lines[j]
720+ indent = ''
721+ for ch in code_line:
722+ if ch in (' ', '\t'):
723+ indent += ch
724+ else:
725+ break
726+ new_lines.append(f'{indent}/* eslint-disable {rule} */\n')
727+ new_lines.append(lines[i]) # Keep $FlowFixMe
728+ new_lines.append(code_line)
729+ new_lines.append(f'{indent}/* eslint-enable {rule} */\n')
730+ i = j + 1
731+ modified = True
732+ fixed += 1
733+ continue
719734
720735 new_lines.append(lines[i])
721736 i += 1
@@ -727,6 +742,14 @@ for root, dirs, files in os.walk(src_dir):
727742print(f" Fixed {fixed} eslint/FlowFixMe orderings")
728743PYEOF
729744
745+ # ##############################################################################
746+ # STEP 11: Final format after all fixes
747+ # ##############################################################################
748+ echo " "
749+ echo " --- Step 11: Final format pass ---"
750+ npm run format 2>&1 || true
751+ echo " Done."
752+
730753echo " "
731754echo " === Flow Migration Fix Script Complete ==="
732755echo " Run 'npm run flow' and 'npm run build' to verify."
0 commit comments