parent
1986349c66
commit
3cfc8d1d0b
@ -1,123 +0,0 @@ |
||||
// https://github.com/maziac/binary-file-viewer/blob/c71ab6043867717327ef546f1646938fd4733548/src/signatureprovider.ts
|
||||
export class RemixSignatureProvider { |
||||
|
||||
props: any |
||||
monaco: any |
||||
constructor(props: any, monaco: any) { |
||||
this.props = props |
||||
this.monaco = monaco |
||||
} |
||||
|
||||
public signatureHelpTriggerCharacters = ['(', ',']; |
||||
async provideSignatureHelp(model: any, position: any, token: any, context: any) { |
||||
console.log(`providing signature help`, context); |
||||
console.log(position) |
||||
|
||||
return new Promise((resolve, reject) => { |
||||
this.props.plugin.once('contextualListener', 'astFinished', async() => { |
||||
console.log('AST FINISHED') |
||||
resolve (await this.run(model, position, token, context)) |
||||
}) |
||||
this.props.plugin.call('contextualListener', 'compile').then(async () => {
|
||||
}) |
||||
}) |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
parseParamaters(lineTrimmed: string) { |
||||
const len = lineTrimmed.length; |
||||
let modLine = ''; |
||||
let k = 0; |
||||
while (k < len) { |
||||
const char = lineTrimmed.substring(k, k+1); |
||||
if (char == "'" || char == '"') { |
||||
do { |
||||
k++; |
||||
if (k >= len) |
||||
break; |
||||
const nChar = lineTrimmed.substring(k, k+1); |
||||
if (nChar == char) |
||||
break; |
||||
} while (k < len); |
||||
k++; |
||||
continue; |
||||
} |
||||
modLine += char; |
||||
k++; |
||||
} |
||||
console.log('MODLINE', modLine) |
||||
} |
||||
|
||||
|
||||
async run(model: any, position: any, token: any, context: any){ |
||||
const line = model.getLineContent(position.lineNumber); |
||||
const lineTrimmed = line.trim(); |
||||
this.parseParamaters(lineTrimmed) |
||||
// find position of the opening parenthesis before the cursor
|
||||
const openParenIndex = line.lastIndexOf('(', position.column - 1); |
||||
console.log(openParenIndex) |
||||
const newPosition = new this.monaco.Position(position.lineNumber, openParenIndex -1); |
||||
const cursorPosition = this.props.editorAPI.getHoverPosition(newPosition) |
||||
const nodeDefinition = await this.props.plugin.call('contextualListener', 'definitionAtPosition', cursorPosition) |
||||
|
||||
const getVariableDeclaration = async (node: any) => { |
||||
if (node.typeDescriptions && node.typeDescriptions.typeString) { |
||||
return `${node.typeDescriptions.typeString}${node.name && node.name.length ? ` ${node.name}` : ''}` |
||||
} else |
||||
if(node.typeName && node.typeName.name){ |
||||
return `${node.typeName.name}${node.name && node.name.length ? ` ${node.name}` : ''}` |
||||
} else { |
||||
return `${node.name && node.name.length ? ` ${node.name}` : ''}` |
||||
} |
||||
} |
||||
|
||||
const getParamaters = async (parameters: any) => { |
||||
console.log('PARAMETERS', parameters) |
||||
if (parameters && parameters.parameters) { |
||||
let params = [] |
||||
for (const param of parameters.parameters) { |
||||
params.push(await getVariableDeclaration(param)) |
||||
} |
||||
console.log('PARAMS', params) |
||||
return params |
||||
} |
||||
} |
||||
|
||||
const getParamtersString = async (parameters: any) => { |
||||
if(parameters) |
||||
return `(${(await getParamaters(parameters)).join(', ')})` |
||||
return '' |
||||
} |
||||
|
||||
const getParameterLabels = async (parameters: any) => { |
||||
const params = await getParamaters(parameters) |
||||
if(!params) return [] |
||||
const arr = params.map(param => { |
||||
return { |
||||
label: param, |
||||
documentation: param |
||||
} |
||||
}) |
||||
console.log(arr) |
||||
return arr |
||||
} |
||||
|
||||
console.log('DEFS', nodeDefinition) |
||||
|
||||
if(!nodeDefinition.nodeType || nodeDefinition.nodeType !== 'FunctionDefinition') return null |
||||
|
||||
return { |
||||
value: { |
||||
signatures: [{ |
||||
label:`function ${nodeDefinition.name} ${await getParamtersString(nodeDefinition.parameters)}`, |
||||
parameters: await getParameterLabels(nodeDefinition.parameters), |
||||
}], |
||||
activeSignature: 0, |
||||
activeParameter: 0 |
||||
}, |
||||
dispose: () => { } |
||||
}; |
||||
} |
||||
} |
Loading…
Reference in new issue