/* ĊĠĠ ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 ĠChar les ĠK orn . ĊĊĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĊĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĊĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĊĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĊĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĊĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĊĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ */ Ċ Ċ package Ġb ate ct . cli . commands . completion Ċ Ċ import Ġb ate ct . cli . options . EnumValue Converter Ċ import Ġb ate ct . cli . options . Option Definition Ċ import Ġb ate ct . cli . options . Value Option Ċ import Ġjava . io . InputStream Reader Ċ Ċ class ĠBash Shell Tab Completion Script Generator Ġ: ĠShell Tab Completion Script Generator Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġgenerate ( options : ĠSet < Option Definition >, Ġregister As : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsingle Use Option Lines Ġ= Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . allow Multiple Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") Ġ{ Ġ""" PLACE HOLDER _ REGISTER _ AS _ add _ single _ use _ option _ suggestion Ġ"${ it . long Option }" Ġ"${ it . short Option Ġ?: Ġ"" } """" Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmultiple Value Option Names Ġ= Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . allow Multiple Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . option Names Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (" Ġ") ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions That Require Values Ġ= Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . accept s Value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . option Names Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (" Ġ") ĊĊĠĠĠĠĠĠĠ Ġval Ġenum Option Value Lines Ġ= Ġgenerate Enum Option Value Lines ( options ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclass Loader Ġ= Ġjava Class . class Loader ĊĠĠĠĠĠĠĠ Ġclass Loader . getResource AsStream (" b ate ct / completion . bash "). use Ġ{ Ġstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInputStreamReader ( stream !! , ĠChar sets . UTF _ 8 ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" PLACE HOLDER _ ADD _ SINGLE _ USE _ OPTIONS ", Ġsingle Use Option Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" PLACE HOLDER _ MULTIPLE _ VALUE _ OPTION _ NAMES ", Ġmultiple Value Option Names ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" PLACE HOLDER _ OPTIONS _ THAT _ REQUIRE _ VALUES ", Ġoptions That Require Values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("# ĠPL ACE HOLDER _ ADD _ ENUM _ VALUES ", Ġenum Option Value Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" PLACE HOLDER _ REGISTER _ AS ", Ġregister As ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Enum Option Value Lines ( options : ĠSet < Option Definition >): ĠString Ġ= Ġoptions ĊĠĠĠĠĠĠĠ Ġ. filter Is Instance < Value Option < *, Ġ* >>() ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . value Converter Ġis ĠEnum Value Converter < *> Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") Ġ{ Ġgenerate Enum Option Value Line ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Enum Option Value Line ( option : ĠValue Option < *, Ġ* >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Converter Ġ= Ġoption . value Converter Ġas ĠEnum Value Converter < *> ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġvalue Converter . possible Values . keys . join ToString (" Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġoption Names Ġ= Ġif Ġ( option . short Option Ġ!= Ġnull ) Ġ"${ option . long Option }| ${ option . short Option }" Ġelse Ġoption . long Option ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ""" $ option Names ) ĠCOMP REPLY += ($ {' $ '} ( comp gen Ġ- W Ġ"$ values " Ġ-- Ġ"${ '$ '} option _ value ")) Ġ;; """ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠOption Definition . option Names : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( short Option Ġ!= Ġnull ) Ġset Of ( short Option , Ġlong Option ) Ġelse Ġset Of ( long Option ) Ċ } Ċ