스크립트 어시스트

# 학습 과정 소개

메이플스토리 월드의 스크립트 에디터는 코드를 보다 정확하고 빠르게 작성할 수 있도록 다양한 기능을 지원합니다. 스크립트 어시스트는 이러한 기능을 총칭합니다. 본 과정에서는 스크립트 어시스트의 다양한 기능을 안내하겠습니다.

# 내비게이션

내비게이션(Navigation) 기능은 스크립트에서 원하는 위치로 빠르고 간편하게 이동할 수 있도록 지원합니다.

### 참조 찾기

참조 찾기(Find References) 기능은 단어 그대로 손쉽게 참조를 찾을 수 있게 도와줍니다. 심벌의 콘텍스트 메뉴에서 Show References를 클릭하면 References 창이 열립니다. 참조 찾기 기능을 사용하면 전체 프로젝트에서 현재 심벌에 대한 참조를 찾습니다. [png](167297348163458165b0bcf8a4f80a73d2dbc09d0db98) [png](167297349998135042ccbd0024d048655782c225f2bd1)

### 정의로 이동

심벌의 콘텍스트 메뉴에서 Go to Definition을 클릭하면 해당 심벌의 정의부로 이동합니다. [png](16729741775763a6b33cef7374dbfae12640036d4eee6)

### 뒤로 이동 / 앞으로 이동

아래의 단축키를 활용하면 기록된 이전 위치로 이동하거나, 다시 최근 위치로 이동할 수 있습니다.

  * Navigate Back : `Ctrl(L)` \+ `-` 키를 누르면 이전 위치로 이동합니다.
  * Navigate Forward : `Ctrl(L)` \+ `=` 키를 누르면 이전 위치에서 최근 위치로 이동합니다. [gif](1678676733191965cd0d90c1c4abd81eea6cec1638e52)



# 코드 검사

코드 검사(Code Inspection)는 코드를 점검하여 사용자가 인지하지 못한 실수를 잡아내어 잘못된 코드를 사전에 방지하는 기능입니다. 예를 들어 아래와 같이 오류가 발생했을 때 밑줄이 표시되고, 여기에 마우스 오버하면 퀵 인포로 자세한 정보가 안내됩니다. 이를 참고하여 오류를 빠르게 수정할 수 있습니다. [png](167324776041075959c14f4d548f2920128aec2cb90be)

코드 검사에서는 대표적으로 아래와 같은 오류가 검출될 수 있습니다.

[{"오류":"UnavailableMethodCall","설명":"쌍점(Colon) 사용이 권장되는 함수에 점(Dot)을 사용했습니다."},{"오류":"TooManyParameter","설명":"필요한 매개 변수 개수보다 많은 매개 변수를 작성했습니다."},{"오류":"ParameterTypeMismatch","설명":"필요한 매개 변수 타입과 다른 매개 변수를 작성했습니다."},{"오류":"AssignTypeMismatch","설명":"할당되는 변수의 타입과 일치하지 않는 타입의 값을 할당했습니다."},{"오류":"TableKeyTypeMismatch","설명":"테이블의 키 타입이 일치하지 않습니다."},{"오류":"NotRecommendedAssignment","설명":"권장하지 않는 할당문을 작성했습니다."},{"오류":"ReturnValueFromVoidFunction","설명":"반환 값이 없는 함수에 반환문을 작성했습니다."},{"오류":"AssignToReadonlyProperty","설명":"읽기 전용 프로퍼티에 할당했습니다."},{"오류":"IntroduceGlobalVariable","설명":"글로벌 변수를 선언했습니다."},{"오류":"ObsoleteAPIUsed","설명":"더는 사용하지 않는 API를 사용했습니다. 다른 API 사용을 권장합니다."},{"오류":"UnbalancedAssignment","설명":"할당문의 왼쪽과 오른쪽의 길이가 다릅니다."},{"오류":"UnreachableCode","설명":"도달할 수 없는 코드를 작성했습니다."},{"오류":"UnresolvedSymbol","설명":"심벌을 찾을 수 없습니다."},{"오류":"UnresolvedMember","설명":"멤버를 찾을 수 없습니다."},{"오류":"UnresolvedFunction","설명":"함수를 찾을 수 없습니다."},{"오류":"DuplicateLocal","설명":"로컬 변수를 중복 선언했습니다."},{"오류":"AnnotationNotFound","설명":"어노테이션을 찾을 수 없습니다."},{"오류":"AnnotationTypeNotFound","설명":"어노테이션에 사용된 타입을 찾을 수 없습니다."},{"오류":"ReturnTypeMismatch","설명":"반환 타입이 일치하지 않습니다."},{"오류":"NotEnoughArgument","설명":"필요한 것보다 적은 개수의 인수를 작성했습니다."},{"오류":"DuplicateFunction","설명":"함수를 중복 정의했습니다."}]

# 강조

코드의 글자색, 글자 배경색 등 다양한 방법으로 문법을 강조(Highliting)하여 코드를 쉽게 인지할 수 있도록 돕는 기능입니다.

### 심벌 참조 강조

심벌 참조 강조(Symbol Reference Highlight)는 선택한 심벌을 참조하는 여러 심벌을 강조하는 기능입니다. 아래와 같이 특정 심벌을 선택하면 이를 참조하는 다른 심벌의 배경색도 강조해서 보여줍니다. [png](167323895521158cef8fc84a04a3cae102bbdbb564d69)

### 문법 강조

문법 강조(Syntax Highlight)는 문법을 강조하는 기능입니다. 예를 들어 코드를 분석하여 해당 심벌이 변수라면 #1F377F 색상으로, 스트링이라면 #F17D80 색상으로, 어노테이션 종류라면 #648064 색상으로 보여줍니다. [png](167331313032494bf43f0f61f49d3a0258a84940b35f3)

예로 든 것 외에도 다양한 문법 강조가 제공됩니다.

### 연관 토큰 강조

연관 토큰 강조(Related Token Highlight)는 연관성이 있는 토큰을 강조하는 기능입니다. 예를 들어 if를 선택하면 if 문에서 함께 사용하는 키워드인 then과 end도 강조해서 보여줍니다. [png](1673239167792975ab6338cd647329a2cc5e0b19a34e7)

# 퀵 인포

퀵 인포(Quick Info)는 함수, 변수, 매개 변수 등에 마우스 오버하면 코드의 부가적인 정보를 쉽고 빠르게 보여주는 기능입니다. [png](1668055736021fa7608306c80416a92a25c5d3277718d)

# 코드 컴플리션

코드 컴플리션(Code Completion)은 문맥을 분석하여 현재 위치에서 작성할 수 있는 심벌을 제안해 주는 기능입니다. 위 화살표 키와 아래 화살표 키를 사용하여 제안을 찾은 다음, Enter 또는 Tab 키를 눌러 구문을 삽입합니다. [png](16680557704632d17b97ae55d402ab873ed774fd19e92)

코드 컴플리션을 다시 띄우고 싶을 때는 심벌에서 `Ctrl` \+ `Space`를 누릅니다. [gif](167867626381462b21a82b8e442b69c56c425c1b65957)

코드 컴플리션에서는 사용자가 선언한 함수나 변수의 이름도 제공하므로 오타를 방지하고 코드를 재사용하기 쉽습니다.

# 시그니처 헬퍼

시그니처 헬퍼(Signature Helper)는 함수를 작성할 때 함수 시그니처를 표시하여 매개 변수 작성에 도움을 주는 기능입니다. 위 화살표 키와 아래 화살표 키를 사용하여 원하는 시그니처를 찾은 뒤 함수 작성에 도움을 받을 수 있습니다. [png](166963495531574f3fb62127b4fc99058e2630eb54577)

시그니처 헬퍼를 다시 띄우고 싶을 때는 `Ctrl` \+ `Shift` \+ `Space`를 누릅니다. [gif](16843976134234c31e23de23d48c58444e0b85cc6bdf2)

# 어노테이션

어노테이션(Annotation)은 스크립트 어시스트 기능 개선에 도움을 주는 기능입니다.

> 더 알아보기 자세한 내용은 [어노테이션 활용하기](/docs/?postId=824) 가이드를 참고합니다.

# 코드 생성

코드 생성(Code Generation)은 코드를 자동으로 추가하여 빠르게 코드를 작성할 수 있도록 하는 기능입니다.

### 괄호 자동 완성

괄호 자동 완성(AutoBracketCompletion)은 괄호를 자동으로 완성하는 기능입니다.

### 문(Statement) 쌍 자동 완성

문(Statement)의 쌍을 자동 완성해주는 기능(AutoStatementPair)은 문장 작성 중 엔터를 입력하면 자동으로 짝을 맞춰줍니다. [gif](168439212479329d2c516a9c44e54932c198c11f3fab7)

# 주석 단축키

단축키를 사용해 코드를 주석 처리하거나 주석을 해제할 수 있습니다.

### 줄 전체 주석

`Ctrl(L)` \+ `/`를 눌러서 코드를 주석 처리할 수 있습니다. '커서가 있는 줄' 또는 '드래그하여 선택한 여러 줄'의 코드를 주석 처리할 수 있습니다. 주석 처리된 부분에서 다시 `Ctrl(L)` \+ `/`를 누르면 주석이 해제됩니다. [gif](1676422686186f6925f46e5cf45dc993bb712979ba9be)

### 블록 주석

`Ctrl(L)` \+ `Shift(L)` \+ `/`를 눌러서 선택한 영역의 코드를 블록 주석으로 처리할 수 있습니다. 줄 전체가 아니라 일부만 블록 주석으로 처리할 수도 있습니다. 블록 주석 처리된 부분에서 다시 `Ctrl(L)` \+ `Shift(L)` \+ `/`를 누르면 주석이 해제됩니다. [gif](167642308489426b09acc998840a59ef5c097f9a0c5e4)

# 그 외 편의 기능

위에 소개한 내용 이외의 편의 기능을 소개합니다.

## 주요 단축키

### 투명화

`Ctrl(L)` 키를 눌러서 코드 컴플리션, 퀵 인포, 시그니처 헬퍼를 투명화할 수 있습니다. 투명화 기능을 활용하면 UI가 기존에 작성된 코드를 가려서 불편한 상황을 해결할 수 있습니다. [gif](16786770174103e1c8fd8108740a891fea3be0b0ac988)

### 복제

`Ctrl(L)` \+ `D` 키를 눌러서 선택한 줄이나 영역을 복제할 수 있습니다.

  * 줄을 복제하면 바로 아랫줄에 복제된 내용이 나옵니다.
  * 영역을 복제하면 선택했던 영역 바로 뒤에 이어서 나옵니다. [gif](1678676463146908e86c91d9a47559246ef5be0195b68)



> 더 알아보기 [MSW 단축키](/docs/?postId=813)의 "스크립트 에디터" 항목에서 사용 가능한 전체 단축키 목록을 확인할 수 있습니다.

## 환경 설정

Edit - Preferences로 들어가서 스크립트 어시스트 환경 설정을 할 수 있습니다. [png](168437690187617eb3133ef694b9f826d4ce89b6be5ac) 각 탭에서 설정을 변경했다면 [Save] 버튼을 눌러 변경 사항을 저장해야 합니다.   


설정 항목은 다음과 같습니다.

[{"항목":"Code Completion","세부 항목":"Enable Code Completion","설명":"코드 컴플리션 기능을 사용합니다."},{"항목":"Signature Helper","세부 항목":"Enable Signature Helper","설명":"시그니처 헬퍼 기능을 사용합니다."},{"항목":"Code Generation","세부 항목":"Enable AutoBracketCompletion","설명":"괄호 자동 완성 기능을 사용합니다."},{"항목":"Code Generation","세부 항목":"Enable AutoStatementPair","설명":"문(Statement)의 쌍을 자동 완성해주는 기능을 사용합니다."},{"항목":"Code Inspection","세부 항목":"Enable Code Inspection","설명":"코드 검사 기능을 사용합니다."},{"항목":"Code Inspection","세부 항목":"Error Level","설명":"각 Error 별로 활성화 여부를 설정합니다."},{"항목":"Code Inspection","세부 항목":"Warning Level","설명":"각 Warning 별로 활성화 여부를 설정합니다."},{"항목":"Code Inspection","세부 항목":"Info Level","설명":"각 Info 별로 활성화 여부를 설정합니다."},{"항목":"Highlighting","세부 항목":"Syntax Highlighting","설명":"문법 강조 기능을 사용합니다.항목별 강조색을 설정할 수 있습니다."},{"항목":"Highlighting","세부 항목":"Symbol Highlighting","설명":"심벌 강조 기능을 사용합니다.항목별 강조색을 설정할 수 있습니다."},{"항목":"Highlighting","세부 항목":"Related Token Highlighting","설명":"연관 토큰 강조 기능을 사용합니다.항목별 강조색을 설정할 수 있습니다."}]