코드 제안 및 코드 완성 사용자 지정하기
함수 및 클래스에 맞게 코드 제안 및 코드 완성을 사용자 지정하려면 MATLAB®에 함수 시그니처에 관한 정보를 제공하십시오. 함수 시그니처는 함수에서 허용 가능한 구문과 데이터형을 설명합니다. MATLAB은 이 정보를 사용하여 편집기, 라이브 편집기, 명령 창에서 코드 제안 및 코드 완성을 표시합니다. JSON 형식 파일 functionSignatures.json
에서 이 함수 정보를 정의합니다. MATLAB은 arguments
블록을 가진 함수에 대해 arguments 블록에 포함된 정보를 바탕으로 코드 완성 및 제안을 제공할 수 있습니다. 이 정보는 functionSignatures.json
파일이 없어도 사용할 수 있습니다. MATLAB Online에서는 코드 제안 및 코드 완성이 지원되지 않습니다.
MATLAB에서 함수 시그니처 정보를 감지할 수 있도록 하려면 함수 코드가 포함된 폴더 안에 있는 resources
폴더에 functionSignatures.json
을 넣어야 합니다. 클래스 메서드 또는 네임스페이스 함수에 대한 정보를 정의하는 경우 가장 바깥쪽 클래스 또는 네임스페이스 폴더의 부모 폴더 안에 있는 resources
폴더에 functionSignatures.json
을 넣어야 합니다. 예를 들어, myClass
의 메서드에 대한 정보를 정의하려면 다음 클래스 및 네임스페이스 구조체의 myFolder
안에 있는 resources
폴더에 functionSignatures.json
을 넣으십시오.
myFolder/+myNamespace/@myClass myFolder/+myNamespace/+mySubnamespace/@myClass
클래스 또는 네임스페이스 폴더 바깥에 있는 클래스의 경우 클래스 코드가 포함된 폴더 안에 있는 resources
폴더에 functionSignatures.json
을 넣으십시오. 동일한 파일에서 여러 함수에 대한 시그니처를 정의할 수 있습니다.
functionSignatures.json
파일에는 단일 JSON 객체가 포함됩니다. JSON은 중괄호를 사용하여 객체를 정의하고 객체를 이름-값 쌍 모음으로 참조합니다. 이러한 JSON term은 함수 시그니처 컨텍스트에서 오버로드되기 때문에 "이름" 대신 "속성"이 사용됩니다. functionSignatures.json
의 JSON 객체에는 체계 버전(선택 사항)과 함수 객체 목록이 포함됩니다. 각 함수 객체는 시그니처 객체 목록을 포함하며 각 시그니처 객체는 인수 객체로 구성된 배열을 포함합니다. JSON은 대괄호를 사용하여 배열을 정의합니다.
체계 버전(선택 사항)을 지정하려면 _schemaVersion
을 첫 번째 속성, 버전 번호를 이 속성의 값으로 사용하십시오. 버전 번호는
형식의 JSON 문자열로 지정합니다. 여기에서 각 숫자는 음이 아닌 정수로 지정합니다. 현재 체계 버전은 major#
.minor#
.patch#
1.0.0
입니다. 파일에 체계 버전이 지정되어 있지 않은 경우, MATLAB은 버전을 1.0.0
으로 가정합니다.
functionSignatures.json
에 구문 오류가 있으면 MATLAB은 파일을 읽을 때 명령 창에 오류 메시지를 표시합니다. validateFunctionSignaturesJSON
함수를 사용하여 JSON 체계와 MATLAB 함수 시그니처 체계에 대해 functionSignatures.json
파일의 유효성을 검사합니다.
함수 객체
함수에 대한 정보를 정의하려면 함수 이름과 동일한 속성을 만드십시오. 속성값은 시그니처 객체입니다.
{ "functionName1": { signatureObj1 }, "functionName2": { signatureObj2 } }
클래스 생성자, 클래스 메서드 또는 네임스페이스 함수에 대한 정보를 정의하려면 함수나 메서드의 전체 이름을 사용하십시오. 예를 들어, 클래스 생성자, 클래스 메서드 myMethod
및 네임스페이스 함수 myFunction
을 정의해 봅니다.
{ "myClass.myClass": { signatureObj }, "myClass.myMethod": { signatureObj }, "myNamespace.myFunction": { signatureObj } }
동일한 속성(함수 이름 또는 메서드 이름)으로 여러 개의 함수 객체를 정의하면 동일한 함수 또는 메서드에 대해 여러 함수 시그니처를 정의할 수 있습니다. 자세한 내용은 여러 개의 시그니처 항목을 참조하십시오.
시그니처 객체
시그니처 객체는 함수의 입력 인수, 출력 인수, 지원되는 플랫폼을 정의합니다. platforms
속성을 제외한 각 속성의 값은 인수 객체로 구성된 배열입니다.
{ "functionName1": { "inputs": [ argumentObj1, argumentObj2 ] } }
JSON 파일에 myClass.myMethod
와 같은 인스턴스 메서드를 지정하는 경우 inputs
에 있는 요소 중 하나가 myClass
의 객체여야 합니다. 일반적으로, 이 객체는 첫 번째 요소입니다. MATLAB에서는 점 표기법(b = myObj.myMethod(a)
) 또는 함수 표기법(b = myMethod(myObj,a)
) 구문을 사용하여 지정된 메서드를 호출할 때 이 메서드에 대한 코드 제안 및 코드 완성을 지원합니다.
JSON 파일의 각 시그니처에는 다음 속성이 포함될 수 있습니다.
속성 | 설명 | 값의 JSON 데이터형 |
---|---|---|
inputs | 함수 입력 인수 목록입니다. MATLAB은 코드 제안 및 코드 완성에 이 속성을 사용합니다. | 인수 객체로 구성된 배열 |
outputs | 함수 출력 인수 목록입니다. MATLAB은 더욱 정교한 코드 제안 및 코드 완성을 위해 이 속성을 사용합니다. | 인수 객체로 구성된 배열 |
platforms | 함수를 지원하는 플랫폼 목록입니다. 플랫폼이 함수를 지원하지 않는 경우, MATLAB은 사용자 지정 코드 제안 및 코드 완성을 제공하지 않습니다. 디폴트 값은 모든 플랫폼입니다. 목록의 요소는 | 쉼표로 구분된 값으로 구성된 문자열 |
인수 객체
인수 객체는 각 입력 인수와 출력 인수에 대한 정보를 정의합니다.
{ "functionName1": { "inputs": [ {"name":"in1", "kind":"required", "type":["numeric"]}, {"name":"in2", "kind":"required", "type":["numeric","integer","scalar"]} ] } }
JSON 파일에 입력값이 표시되는 순서는 중요합니다. 예를 들어, functionName1
함수를 호출할 때 in1
은 in2
앞에 표시되어야 합니다.
각 인수 객체에는 다음 속성이 포함될 수 있습니다.
더 복잡한 함수 시그니처의 경우, 각 인수 객체에 다음 속성을 사용할 수 있습니다.
함수 시그니처 파일 생성하기
이 예제에서는 함수에 맞게 사용자 지정 코드 제안 및 코드 완성을 만드는 방법에 대해 설명합니다.
나중 단계에 JSON 파일에서 시그니처를 설명할 함수를 만듭니다. 예제 함수는 다음 인수를 허용합니다.
필수 인수 2개
varargin
을 통해 선택적 positional 인수 1개varargin
을 통해 선택적 이름-값 인수 2개
myFunc
는 코드 제안을 보여주기 위한 함수이고 인수 검사는 하지 않습니다.
% myFunc Example function % This function is called with any of these syntaxes: % % myFunc(in1, in2) accepts 2 required arguments. % myFunc(in1, in2, in3) also accepts an optional 3rd argument. % myFunc(___, NAME, VALUE) accepts one or more of the following name-value % arguments. This syntax can be used in any of the previous syntaxes. % * 'NAME1' with logical value % * 'NAME2' with 'Default', 'Choice1', or 'Choice2' function myFunc(reqA,reqB,varargin) % Initialize default values NV1 = true; NV2 = 'Default'; posA = []; if nargin > 3 if rem(nargin,2) posA = varargin{1}; V = varargin(2:end); else V = varargin; end for n = 1:2:size(V,2) switch V{n} case 'Name1' NV1 = V{n+1}; case 'Name2' NV2 = V{n+1} otherwise error('Error.') end end end end
myFunc
와 동일한 폴더 안에 있는 resources
폴더에서 파일 functionSignatures.json
에 다음 함수 시그니처 설명을 만듭니다. 입력 이름이 myFunc
본문의 이름과 일치하지 않지만 도움말 텍스트와는 일치합니다.
{ "_schemaVersion": "1.0.0", "myFunc": { "inputs": [ {"name":"in1", "kind":"required", "type":["numeric"], "purpose":"ID of item"}, {"name":"in2", "kind":"required", "type":["numeric"], "purpose":"# Items"}, {"name":"in3", "kind":"ordered", "type":["numeric"], "purpose":"Input Value"}, {"name":"Name1", "kind":"namevalue", "type":["logical","scalar"],"purpose":"Option"}, {"name":"Name2", "kind":"namevalue", "type":["char", "choices={'Default','Choice1','Choice2'}"]} ] } }
MATLAB은 이 함수 시그니처 설명을 사용하여 코드 제안 및 코드 완성에 대한 정보를 제공합니다.
함수 시그니처 정보의 사용 방법
MATLAB은 사용자가 입력할 때 JSON 파일에 있는 함수 시그니처 정보를 사용하여 입력과 일치하는 구문을 표시합니다. Tab 키를 눌러 부분적으로 입력한 텍스트를 완성할 수도 있습니다. 명령 창에서는 MATLAB이 사용자가 입력할 때 JSON 파일을 사용하여 입력과 일치하는 구문을 표시하지 않습니다.
스크립트 또는 라이브 스크립트에서 코드 제안을 시험하려면 먼저 myFunc
를 호출해 보십시오. JSON 파일에서 작성한 이름과 용도가 표시됩니다. 그러면 MATLAB은 인수가 언제 선택적 인수가 되는지, 또 여러 건의 제안이 있는지 알려줍니다(예: 세 번째 positional 인수 또는 이름-값 인수). 이름-값 인수 옵션이 나열됩니다.
함수 호출에 이름-값 인수를 추가하면 MATLAB은 JSON 파일에 있는 선택 사항을 제시합니다. 'Name1'
이 논리형 스칼라로 정의되어 있기 때문에 MATLAB은 선택 사항(true
또는 false
)을 자동으로 채웁니다. MATLAB은 JSON 파일에서 'Name2'
인수 값으로 3개를 취합니다.
여러 개의 시그니처
함수에 여러 구문이 있으면 코드 제안에서 함수 구현에 상관없이 구문을 여러 개의 함수 시그니처로 그룹화하는 것이 유용할 수 있습니다. 여러 개의 시그니처에 코드 제안 및 코드 완성을 제공하려면 JSON 파일에 속성이 동일한 함수 객체를 여러 개 만드십시오.
두 번째 입력값의 클래스에 따라 서로 다른 코드 경로를 따르는 다음 함수를 생각해 보겠습니다. 이 함수는 코드 제안을 위한 예제이므로 계산이므로 오류 검사는 수행하지 않습니다.
function anotherFunc(arg1,arg2,arg3) switch class(arg2) case 'double' % Follow code path 1 case {'char','string'} % Follow code path 2 otherwise error('Invalid syntax.') end end
코드 제안의 관점에서 이 함수에 2개의 함수 시그니처가 있는 경우를 고려해 보겠습니다. 첫 번째 시그니처는 2개의 필수 숫자형 값을 허용합니다. 두 번째 시그니처는 필수 숫자형을 허용하며 그다음에 문자형 또는 string형, 마지막에 필수 숫자형이 옵니다. 여러 개의 함수 시그니처를 정의하려면 JSON 파일에 속성(함수 이름)이 동일한 함수 객체를 여러 개 정의하십시오.
{ "_schemaVersion": "1.0.0", "anotherFunc": { "inputs": [ {"name":"input1", "kind":"required", "type":["numeric"]}, {"name":"input2", "kind":"required", "type":["numeric"]} ] }, "anotherFunc": { "inputs": [ {"name":"input1", "kind":"required", "type":["numeric"]}, {"name":"input2", "kind":"required", "type":[["char"],["string"]]}, {"name":"input3", "kind":"required", "type":["numeric"]} ] } }
또는 인수 객체의 mutuallyExclusiveGroup
속성을 사용하여 여러 개의 함수 시그니처를 정의할 수 있습니다. 일반적으로 여러 개의 함수 객체를 구현하는 것이 훨씬 간편하고 읽기 쉽지만, 상호 배타적인 그룹을 사용하면 input1
같은 일반적인 인수 객체를 재사용할 수 있습니다.
{ "_schemaVersion": "1.0.0", "anotherFunc": { "inputs": [ {"name":"input1", "kind":"required", "type":["numeric"]}, {"mutuallyExclusiveGroup": [ [ {"name":"input2", "kind":"required", "type":["numeric"]} ], [ {"name":"input2", "kind":"required", "type":[["char"],["string"]]}, {"name":"input3", "kind":"required", "type":["numeric"]} ] ] } ] } }
참고 항목
validateFunctionSignaturesJSON