/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠMar cin ĠBu k ow ie ck i . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġio . vac uum . utils Ċ Ċ import Ġcom . go ide . psi . Go File Ċ import Ġcom . go ide . psi . Go Function Or Method Declaration Ċ import Ġcom . intellij . code Insight . daemon . Daemon Code Analyzer Ċ import Ġcom . intellij . code Inspection . Inspection Engine Ċ import Ġcom . intellij . code Inspection . Local Inspection Tool Ċ import Ġcom . intellij . code Inspection . ex . Inspection Manager Ex Ċ import Ġcom . intellij . code Inspection . ex . Local Inspection Tool Wrapper Ċ import Ġcom . intellij . openapi . file Editor . File Editor Manager Ċ import Ġcom . intellij . openapi . file Editor . Open FileDescriptor Ċ import Ġcom . intellij . openapi . file Editor . Text Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . project . Project Manager Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . refactor ing . suggest ed . end Offset Ċ import Ġcom . intellij . refactor ing . suggest ed . start Offset Ċ import Ġio . vac uum . codes mell s . Vac uum C ognitive Complexity Ċ import Ġio . vac uum . codes mell s . Vac uum Complex Boolean Expressions Inspection Ċ import Ġio . vac uum . codes mell s . Vac uum Switch Statement Inspection Ċ import Ġio . vac uum . configurable . Vac uum Lines Inspection Ċ import Ġio . vac uum . configurable . Vac uum Parameters Inspection Ċ import Ġio . vac uum . ins pe ctions . Vac uum Base Local Inspection Ċ Ċ /** Ċ Ġ* Ġ@ author ĠMar cin ĠBu k ow ie ck i Ċ Ġ*/ Ċ object ĠV ac uum Utils Ġ{ ĊĊĠĠĠ Ġconst Ġval Ġgo Extension Ġ= Ġ" go " ĊĊĠĠĠ Ġfun Ġdetect Delim ( split : ĠArray < String >): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( split . isEmpty () Ġ|| Ġsplit . size Ġ== Ġ 1 ) Ġreturn Ġ"" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( split . slice ( 1 Ġuntil Ġsplit . size ). distinct (). size Ġ== Ġ 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsplit [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove Caret ToEnd ( project : ĠProject , Ġelement : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFile Editor Manager . getInstance ( project ). selected Editor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠText Editor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġit . editor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . caret Model . moveTo Offset ( element . end Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġas Go File ( project : ĠProject , Ġvirtual File : ĠVirtual File ): ĠGo File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPsi Manager . getInstance ( project ). find File ( virtual File ) Ġas ? ĠGo File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfocus Editor ( project : ĠProject , Ġvirtual File : ĠVirtual File , Ġoffset : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFile Editor Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Editor ( Open FileDescriptor ( project , Ġvirtual File , Ġoffset ), Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfocus Editor ( project : ĠProject , Ġvirtual File : ĠVirtual File ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFile Editor Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Editor ( Open FileDescriptor ( project , Ġvirtual File ), Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfocus Editor ( project : ĠProject , Ġvirtual File : ĠVirtual File , Ġfunction : ĠGo Function Or Method Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFile Editor Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Editor ( Open FileDescriptor ( project , Ġvirtual File , Ġfunction . last Child . start Offset ), Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . is Bool (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ== Ġ" true " Ġ|| Ġthis Ġ== Ġ" false " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . is And (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ== Ġ" and " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . is Eq (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ== Ġ" ==" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . isNot Eq (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ== Ġ"! =" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . isTrue (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ== Ġ" true " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . isFalse (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ== Ġ" false " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . is Eq Or Not Eq (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ==" Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"! =" Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . is Less er (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"< " Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrer un Intent ions () Ġ{ ĊĠĠĠĠĠĠĠ ĠProject Manager . getInstance If Created ()?. let Ġ{ Ġproject Manager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Manager . open Projects . forEach Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Manager Ġ= ĠPsi Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Editor Manager . getInstance ( project ). all Editors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . file ?. extension Ġ== Ġ" go ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgo File Ġ= Ġpsi Manager . find File ( it . file Ġ?: Ġreturn ) Ġas ? ĠGo File Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDa emon Code Analyzer . getInstance ( project ). restart ( go File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrer un Int ention ( file : ĠGo File , Ġintention : ĠLocal Inspection Tool ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate New Global Context Ġ= ĠIns pection Manager Ex . getInstance ( file . project ). createNew Global Context () ĊĠĠĠĠĠĠĠ ĠIns pection Engine . run Inspection On File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Inspection Tool Wrapper ( int ention ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate New Global Context ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Configurable Intent ions (): ĠList < Vac uum Base Local Inspection > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ac uum C ognitive Complexity (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ac uum Complex Boolean Expressions Inspection (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ac uum Switch Statement Inspection (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ac uum Lines Inspection (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ac uum Parameters Inspection () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠS printf Context ( private Ġval Ġstart : ĠString ,) Ċ