in src/language/providers/elementCompletion.ts [239:434]
function nearestOpenTagChildElements(
document: vscode.TextDocument,
position: vscode.Position,
tagNearestTrigger: string,
tagPosition: vscode.Position,
definedVariables: string,
nsPrefix: string
) {
switch (tagNearestTrigger) {
case 'element':
return getElementCompletionItems(
['complexType', 'simpleType', 'annotation'],
'',
definedVariables,
nsPrefix
)
case 'sequence':
return getElementCompletionItems(
['element', 'sequence', 'choice', 'annotation'],
'',
'',
nsPrefix
)
case 'choice':
return getElementCompletionItems(
['element', 'sequence', 'group', 'annotation'],
'',
'',
nsPrefix
)
case 'group':
return getElementCompletionItems(
['sequence', 'annotation'],
'',
'',
nsPrefix
)
case 'complexType':
return getElementCompletionItems(
['sequence', 'group', 'choice'],
'',
'',
nsPrefix
)
case 'simpleType':
return getElementCompletionItems(
['annotation', 'restriction'],
'',
'',
nsPrefix
)
case 'restriction':
return getElementCompletionItems(
[
'maxInclusive',
'maxExclusive',
'minInclusive',
'minExclusive',
'pattern',
'totalDigits',
'fractionDigits',
'enumeration',
],
'',
'',
nsPrefix
)
case 'annotation':
return getElementCompletionItems(['appinfo'], '', '', nsPrefix)
case 'appinfo':
let triggerText = document.lineAt(tagPosition.line).text
let iCount = getItemsOnLineCount(triggerText)
const newPosition =
iCount < 2
? new vscode.Position(tagPosition.line - 1, tagPosition.character)
: tagPosition
let pElement = getAnnotationParent(document, newPosition, nsPrefix)
switch (pElement) {
case 'schema':
return getElementCompletionItems(
[
'dfdl:defineFormat',
'dfdl:defineVariable',
'dfdl:defineEscapeScheme',
'dfdl:format',
],
'',
'',
nsPrefix
)
case 'element':
return getElementCompletionItems(
[
'dfdl:assert',
'dfdl:discriminator',
'dfdl:element',
'dfdl:setVariable',
'dfdl:property',
],
'',
'',
nsPrefix
)
case 'sequence':
return getElementCompletionItems(
[
'dfdl:assert',
'dfdl:discriminator',
'dfdl:newVariableInstance',
'dfdl:sequence',
],
'',
'',
nsPrefix
)
case 'choice':
return getElementCompletionItems(
[
'dfdl:assert',
'dfdl:choice',
'dfdl:discriminator',
'dfdl:newVariableInstance',
'dfdl:setVariable',
],
'',
'',
nsPrefix
)
case 'group':
return getElementCompletionItems(
[
'dfdl:assert',
'dfdl:group',
'dfdl:discriminator',
'dfdl:newVariableInstance',
'dfdl:setVariable',
],
'',
'',
nsPrefix
)
case 'simpleType':
return getElementCompletionItems(
[
'dfdl:assert',
'dfdl:discriminator',
'dfdl:setVariable',
'dfdl:simpleType',
'dfdl:property',
],
'',
'',
nsPrefix
)
default:
return undefined
}
case 'assert':
return getElementCompletionItems(['CDATA', '{}'], '', '', nsPrefix)
case 'discriminator':
return getElementCompletionItems(['CDATA', '{}'], '', '', nsPrefix)
case 'defineFormat':
return getElementCompletionItems(['dfdl:format'], '', '', nsPrefix)
case 'defineEscapeScheme':
return getElementCompletionItems(['dfdl:escapeScheme'], '', '', nsPrefix)
case 'format':
return getElementCompletionItems(['dfdl:property'], '', '', nsPrefix)
case 'include':
return getElementCompletionItems([''], '', '', nsPrefix)
case 'import':
return getElementCompletionItems([''], '', '', nsPrefix)
case 'schema':
return getElementCompletionItems(
[
'sequence',
'element',
'choice',
'group',
'complexType',
'simpleType',
'annotation',
'include',
'import',
],
'',
'',
nsPrefix
)
case 'xml version':
return getElementCompletionItems(['schema'], '', '', '')
case 'emptySchema':
return getElementCompletionItems(['xml version'], '', '', '')
default:
return undefined
}
}