def parse_fragment_definition(lexer: Lexer) -> FragmentDefinitionNode:
    """FragmentDefinition"""
    start = lexer.token
    expect_keyword(lexer, "fragment")
    # Experimental support for defining variables within fragments changes the grammar
    # of FragmentDefinition
    if lexer.experimental_fragment_variables:
        return FragmentDefinitionNode(
            name=parse_fragment_name(lexer),
            variable_definitions=parse_variable_definitions(lexer),
            type_condition=parse_type_condition(lexer),
            directives=parse_directives(lexer, False),
            selection_set=parse_selection_set(lexer),
            loc=loc(lexer, start),
        )
    return FragmentDefinitionNode(
        name=parse_fragment_name(lexer),
        type_condition=parse_type_condition(lexer),
        directives=parse_directives(lexer, False),
        selection_set=parse_selection_set(lexer),
        loc=loc(lexer, start),
    )
FragmentDefinition