diff --git a/crates/languages/src/bash/brackets.scm b/crates/languages/src/bash/brackets.scm index 62c875dec1..5ae73cdda7 100644 --- a/crates/languages/src/bash/brackets.scm +++ b/crates/languages/src/bash/brackets.scm @@ -3,3 +3,10 @@ ("{" @open "}" @close) ("\"" @open "\"" @close) ("`" @open "`" @close) +(("do" @open "done" @close) (#set! newline.only)) +((case_statement ("in" @open "esac" @close)) (#set! newline.only)) +((if_statement (elif_clause ("then" @open)) (else_clause ("else" @close))) (#set! newline.only)) +((if_statement (else_clause ("else" @open)) "fi" @close) (#set! newline.only)) +((if_statement ("then" @open) (elif_clause ("elif" @close))) (#set! newline.only)) +((if_statement ("then" @open) (else_clause ("else" @close))) (#set! newline.only)) +((if_statement ("then" @open "fi" @close)) (#set! newline.only)) diff --git a/crates/languages/src/bash/config.toml b/crates/languages/src/bash/config.toml index b56628ee8f..07c5161acb 100644 --- a/crates/languages/src/bash/config.toml +++ b/crates/languages/src/bash/config.toml @@ -10,6 +10,11 @@ brackets = [ { start = "{", end = "}", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, { start = "'", end = "'", close = true, newline = false, not_in = ["string", "comment"] }, + { start = "do", end = "done", close = false, newline = true, not_in = ["comment", "string"] }, + { start = "then", end = "fi", close = false, newline = true, not_in = ["comment", "string"] }, + { start = "then", end = "else", close = false, newline = true, not_in = ["comment", "string"] }, + { start = "then", end = "elif", close = false, newline = true, not_in = ["comment", "string"] }, + { start = "in", end = "esac", close = false, newline = true, not_in = ["comment", "string"] }, ] ### WARN: the following is not working when you insert an `elif` just before an else