# LSP Documentation for 'choose' keyword

[keyword]
name = "choose"
category = "behavior_tree"
short_description = "Selector node that tries children in order until one succeeds"
web_url = "https://r3t-studios.github.io/storybook/reference/behavior-trees.html#choose"

[syntax]
format = "choose [label] { children... }"
example = """
choose panic_response {
    then time_panic { ... }
    then obstacle_panic { ... }
    then default_panic { ... }
}
"""

[hover]
markdown = """
**`choose` - Selector Node**

Tries each child behavior in order until one succeeds.

**Behavior:**
- Evaluates children left-to-right
- Returns **success** on first successful child
- Skips remaining children after first success
- Returns **failure** only if all children fail

**Named nodes (optional):**
```storybook
choose state_dependent_action {
    then appear { ... }
    then confuse_alice { ... }
    then fade_away { ... }
}
```

Labels make intent clear and aid debugging!

**Use cases:**
- Decision-making between alternatives
- Fallback chains (try A, if fails try B)
- Priority ordering (prefer A, accept B)

[Learn more →](https://r3t-studios.github.io/storybook/reference/behavior-trees.html#choose)
"""

[completion]
snippet = "choose ${1:label} {\n\t$0\n}"
description = "Selector node (tries children until one succeeds)"
sort_text = "01-choose"

[context]
valid_in = ["behavior_block", "choose_block", "then_block", "decorator_block"]
invalid_in = ["character_block", "life_arc_block", "schedule_block"]

[related]
keywords = ["then", "if", "when"]
concepts = ["behavior_trees", "named_nodes", "selectors"]
