-- foldingRange-0 --
package folding //@fold("package")

import (<>)

import _ "os"

// bar is a function.<>
func bar(<>) string {<>}

-- foldingRange-1 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {<>}
	// This is a multiline comment<>
	return `
this string
is not indented`
}

-- foldingRange-2 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {
	case true:<>
	case false:<>
	default:<>
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

-- foldingRange-3 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {
	case true:
		if true {<>} else {<>}
	case false:
		fmt.Println(<>)
	default:
		fmt.Println(<>)
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

-- foldingRange-4 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {
	case true:
		if true {
			fmt.Println(<>)
		} else {
			fmt.Println(<>)
		}
	case false:
		fmt.Println("false")
	default:
		fmt.Println("default")
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

-- foldingRange-comment-0 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.<>
func bar() string {
	switch {
	case true:
		if true {
			fmt.Println("true")
		} else {
			fmt.Println("false")
		}
	case false:
		fmt.Println("false")
	default:
		fmt.Println("default")
	}
	// This is a multiline comment<>
	return `
this string
is not indented`
}

-- foldingRange-imports-0 --
package folding //@fold("package")

import (<>)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {
	case true:
		if true {
			fmt.Println("true")
		} else {
			fmt.Println("false")
		}
	case false:
		fmt.Println("false")
	default:
		fmt.Println("default")
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

-- foldingRange-lineFolding-0 --
package folding //@fold("package")

import (<>
)

import _ "os"

// bar is a function.<>
func bar() string {<>
}

-- foldingRange-lineFolding-1 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {<>
	}
	// This is a multiline comment<>
	return `
this string
is not indented`
}

-- foldingRange-lineFolding-2 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {
	case true:<>
	case false:<>
	default:<>
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

-- foldingRange-lineFolding-3 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {
	case true:
		if true {<>
		} else {<>
		}
	case false:
		fmt.Println("false")
	default:
		fmt.Println("default")
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

-- foldingRange-lineFolding-comment-0 --
package folding //@fold("package")

import (
	"fmt"
	_ "log"
)

import _ "os"

// bar is a function.<>
func bar() string {
	switch {
	case true:
		if true {
			fmt.Println("true")
		} else {
			fmt.Println("false")
		}
	case false:
		fmt.Println("false")
	default:
		fmt.Println("default")
	}
	// This is a multiline comment<>
	return `
this string
is not indented`
}

-- foldingRange-lineFolding-imports-0 --
package folding //@fold("package")

import (<>
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	switch {
	case true:
		if true {
			fmt.Println("true")
		} else {
			fmt.Println("false")
		}
	case false:
		fmt.Println("false")
	default:
		fmt.Println("default")
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

