package Ġcom . jetbrains . snake charm . lang . parser Ċ Ċ import Ġcom . intellij . lang . Language AST Factory Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . intellij . test Framework . Parsing TestCase Ċ import Ġcom . jetbrains . python . Python Dialect s Token Set Contributor Ċ import Ġcom . jetbrains . python . Python Language Ċ import Ġcom . jetbrains . python . Python Parser Definition Ċ import Ġcom . jetbrains . python . Python Token Set Contributor Ċ import Ġcom . jetbrains . python . psi . Language Level Ċ import Ġcom . jetbrains . python . psi . Py Function Ċ import Ġcom . jetbrains . python . psi . Py Psi Facade Ċ import Ġcom . jetbrains . python . psi . Python Visitor Filter Ċ import Ġcom . jetbrains . python . psi . impl . Py Psi Facade Impl Ċ import Ġcom . jetbrains . python . psi . impl . Python AST Factory Ċ import Ġcom . jetbrains . python . psi . impl . Python Language Level Push er Ċ import Ġcom . jetbrains . snake charm . Sn ak em ake TestUtil Ċ import Ġcom . jetbrains . snake charm . lang . S mk Token Set Contributor Ċ import Ġcom . jetbrains . snake charm . lang . Sn ak em ake Language Dialect ĊĊ Ċ /** Ċ Ġ* Ġ@ author ĠRoman . Ch ern y atch ik Ċ Ġ* Ġ@ date Ġ 2 0 1 8 - 1 2 - 3 1 Ċ Ġ* Ċ Ġ*/ Ċ class ĠSn ak em ake Parsing Test Ġ: ĠParsing TestCase ( ĊĠĠĠ Ġ" psi ", Ġ" sm k ", ĠS mk Parser Definition (), ĠPython Parser Definition () Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmy Language Level Ġ= ĠLanguage Level . getDefault () ĊĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĊĠĠĠĠĠĠĠ Ġ// ĠParsing Ġtests Ġdoesn 't Ġuse Ġreal Ġint ellij Ġapp Ġ=> Ġwe Ġcannot Ġuse ĊĠĠĠĠĠĠĠ Ġ// ĠTest Application Manager . getInstance () Ġhere ĊĊĠĠĠĠĠĠĠ Ġ// Ġw / o Ġthis Ġcannot Ġinstantiate ĠSn ak em ake Lexer ĊĠĠĠĠĠĠĠ Ġregister Extension Point ( Python Dialect s Token Set Contributor . EP _ NAME , ĠPython Dialect s Token Set Contributor :: class . java ) ĊĠĠĠĠĠĠĠ Ġregister Extension ( Python Dialect s Token Set Contributor . EP _ NAME , ĠPython Token Set Contributor ()) ĊĠĠĠĠĠĠĠ Ġregister Extension ( Python Dialect s Token Set Contributor . EP _ NAME , ĠS mk Token Set Contributor ()) ĊĠĠĠĠĠĠĠ Ġadd Explicit Extension ( Language AST Factory . INSTANCE , ĠPython Language . getInstance (), ĠPython AST Factory ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġw / o Ġthis Ġfails Ġdue Ġto ĠN PE s Ġon ĠPy Psi Facade Ġaccess ĊĠĠĠĠĠĠĠ Ġproject . register Service ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPy Psi Facade :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPy Psi Facade Impl :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġhave Ġto Ġforce Ġclean Ġlanguage Ġextensions Ġcache Ġhere , Ġbecause Ġthese Ġparser Ġtests Ġdon 't Ġuse Ġreal ĊĠĠĠĠĠĠĠ Ġ// Ġtest Ġapplication Ġand Ġdon 't Ġload Ġall Ġrequired Ġextensions . ĊĠĠĠĠĠĠĠ Ġ// ĠE . g . ĠPython Id . visitor Filter ĠEP Ġwill Ġnot Ġload Ġ` Sn ak em ake Visitor Filter ` Ġand Ġas Ġa Ġresult Ġother Ġtests Ġin Ġtest Ġsuite Ġwill Ġfail ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Extension Ġ= ĠPython Visitor Filter . INSTANCE ĊĠĠĠĠĠĠĠ Ġlanguage Extension . clear Cache ( Sn ak em ake Language Dialect ) ĊĠĠĠĠĠĠĠ Ġlanguage Extension . clear Cache ( Python Language . INSTANCE ) ĊĊĠĠĠĠĠĠĠ Ġsuper . te ar Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget TestData Path () Ġ= ĠSn ak em ake TestUtil . get TestData Path (). toString () ĊĊĠĠĠ Ġoverride Ġfun Ġcreate File ( name : ĠString , Ġtext : ĠString ): ĠPsi File Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġsuper . create File ( name , Ġtext ) ĊĠĠĠĠĠĠĠ ĠPython Language Level Push er . specify File Language Level ( file . virtual File , Ġmy Language Level ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfile ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Python Code () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule In Python Block () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Checkpoint () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule No Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Multiple () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Multiple Single Line () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Invalid () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Invalid No Param Body () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Invalid No Param Body E of () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Invalid Param () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Multiple Single Line No Break () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Unexpected Section Keyword () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Keywords () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args String Mult iline () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args H anging Comma () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Multiple () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Ind ents () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Keyword Args () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Keyword Args Multiple () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Run () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Run Python Block () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Incomplete 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Incomplete 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Params List Args Keywords () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Params List Args Keywords In Rule () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow TopLevel Decor ators In Rule As Keyword Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Python Code Block Keywords () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Rule order () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Rule order H anging Separator () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Rule order Invalid () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Local rules () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Local rules Invalid () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Local rules H anging Comma () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Unknown Sections () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Single Line Doc string () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Multi Line Doc strings () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Single Quoted Doc strings () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Cr azy Doc strings () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest H anging Com a () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Single Sub workflow () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Multiple Single Line With Rule Section Indent () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args String Mult iline Incorrect Un indent () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Formatted String Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Mult iline String Arguments With Calls And Explicit Concatenation () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule String Call Expression Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Un balanced Br aces Recovery () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Keyword Like Identifiers As Identifiers () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Keyword Like Identifiers As Keywords () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 1 3 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 1 9 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Doc string At EndOf File () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Keyword Identifiers At Top level With Pre ced ing Open Brace () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Keyword Identifier With No Indent () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Incorrect Un indent () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Incorrect Indent ation () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Line Comments () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Indent ation Inside Br aces () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Params List Args Incorrect Rule Section Level Indent ation () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Formatted String After Top level Section () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 2 0 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Container () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Workflow Env vars () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġtest Formatted String In Top level Statements () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Section Notebook () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Section Container () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Section Env modules () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 2 7 5 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 2 7 5 _ 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġminimal Ġtest Ġcase ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 2 7 5 _ 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġminimal Ġtest Ġcase Ġ+ Ġworkaround ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 3 1 3 _ 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 3 1 3 _ 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Issue 1 7 5 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Rule Section Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġissue Ġ# 3 5 1 ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Module () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Module Incomplete () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Use () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Use Incomplete () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Use Invalid () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Empty Sections () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠActually Ġsn ak em ake Ġrequires Ġpython Ġ 3 . x Ġand Ġno Ġneed Ġto Ġhave Ġit Ġworking Ġwith Ġpython Ġ 2 . x ĊĠĠĠĠĠĠĠ Ġ// do Test ( Language Level . from Python Version (" 2 ")) ĊĊĠĠĠĠĠĠĠ Ġdo Test ( Language Level . from Python Version (" 3 ") !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Test ( language Level : ĠLanguage Level ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġmy Language Level ĊĠĠĠĠĠĠĠ Ġmy Language Level Ġ= Ġlanguage Level ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Test ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Language Level Ġ= Ġprev ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġrule ... ĊĠĠĠĠĠĠĠ Ġ// ensure Each Function Has Statement List ( my File , ĠC ython Function :: class . java ) ĊĠĠĠĠĠĠĠ Ġensure Each Function Has Statement List ( my File , ĠPy Function :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠPy Function > Ġensure Each Function Has Statement List ( ĊĠĠĠĠĠĠĠ Ġparent File : ĠPsi File , ĊĠĠĠĠĠĠĠ Ġfunction Type : ĠClass < T > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= ĠPsi Tree Util . find Children OfType ( parent File , Ġfunction Type ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( function ToCheck Ġin Ġfunctions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction ToCheck . statement List Ġ// To Ġmake Ġsure Ġeach Ġfunction Ġhas Ġstatement Ġlist Ġ( does Ġnot Ġthrow Ġexception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }