This test verifies the fix for golang/go#70563: refactor.extract.variable
inserts new statement before the scope of its free symbols.

-- flags --
-ignore_extra_diags

-- inside_else.go --
package extract

func _() {
	if x := 1; true {

	} else if y := x + 1; true { //@codeaction("x + 1", "refactor.extract.variable", err=re"else-if's init has free variable")

	}
}
-- inside_case.go --
package extract

func _() {
	switch x := 1; x {
	case x + 1: //@codeaction("x + 1", "refactor.extract.variable-all", err=re"switch's init has free variable")
		y := x + 1 //@codeaction("x + 1", "refactor.extract.variable-all", err=re"switch's init has free variable")
		_ = y
	case 3:
		y := x + 1 //@codeaction("x + 1", "refactor.extract.variable-all", err=re"switch's init has free variable")
		_ = y
	}
}
-- parent_if.go --
package extract

func _() {
	if x := 1; x > 0 {
		y = x + 1 //@codeaction("x + 1", "refactor.extract.variable-all", err=re"if-statement's init has free variable")
	} else {
		y = x + 1 //@codeaction("x + 1", "refactor.extract.variable-all", err=re"if-statement's init has free variable")
	}
}
-- parent_switch.go --
package extract

func _() {
	switch x := 1; x {
	case 1:
		y = x + 1 //@codeaction("x + 1", "refactor.extract.variable-all", err=re"switch's init has free variable")
	case 3:
		y = x + 1 //@codeaction("x + 1", "refactor.extract.variable-all", err=re"switch's init has free variable")
	}
}
