fix quickfix

pull/5370/head
aniket-engg 2 years ago
parent 155b468381
commit cb38d4fa61
  1. 95
      libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts

@ -3,9 +3,7 @@ import monaco from '../../types/monaco'
import {EditorUIProps} from '../remix-ui-editor' import {EditorUIProps} from '../remix-ui-editor'
import {default as fixesList} from './quickfixes' import {default as fixesList} from './quickfixes'
export class RemixCodeActionProvider export class RemixCodeActionProvider implements monaco.languages.CodeActionProvider {
implements monaco.languages.CodeActionProvider
{
props: EditorUIProps props: EditorUIProps
monaco: Monaco monaco: Monaco
constructor(props: any, monaco: any) { constructor(props: any, monaco: any) {
@ -31,42 +29,16 @@ implements monaco.languages.CodeActionProvider
lineNumber: error.startLineNumber, lineNumber: error.startLineNumber,
column: error.startColumn column: error.startColumn
}) })
const nodeAtPosition = await this.props.plugin.call( const nodeAtPosition = await this.props.plugin.call('codeParser', 'definitionAtPosition', cursorPosition)
'codeParser',
'definitionAtPosition',
cursorPosition
)
// Check if a function is hovered // Check if a function is hovered
if ( if (nodeAtPosition && nodeAtPosition.nodeType === 'FunctionDefinition') {
nodeAtPosition &&
nodeAtPosition.nodeType === 'FunctionDefinition'
) {
// Identify type of AST node // Identify type of AST node
if ( if (nodeAtPosition.parameters && !Array.isArray(nodeAtPosition.parameters) && Array.isArray(nodeAtPosition.parameters.parameters)) isOldAST = true
nodeAtPosition.parameters && const paramNodes = isOldAST ? nodeAtPosition.parameters.parameters : nodeAtPosition.parameters
!Array.isArray(nodeAtPosition.parameters) &&
Array.isArray(nodeAtPosition.parameters.parameters)
)
isOldAST = true
const paramNodes = isOldAST
? nodeAtPosition.parameters.parameters
: nodeAtPosition.parameters
for (const fix of fixes) { for (const fix of fixes) {
msg = paramNodes.length msg = paramNodes.length
? await this.fixForMethodWithParams( ? await this.fixForMethodWithParams(model, paramNodes, fix, error, isOldAST)
model, : await this.fixForMethodWithoutParams(model, nodeAtPosition, fix, error, isOldAST)
paramNodes,
fix,
error,
isOldAST
)
: await this.fixForMethodWithoutParams(
model,
nodeAtPosition,
fix,
error,
isOldAST
)
this.addQuickFix(actions, error, model.uri, { this.addQuickFix(actions, error, model.uri, {
id: fix.id, id: fix.id,
title: fix.title, title: fix.title,
@ -76,12 +48,7 @@ implements monaco.languages.CodeActionProvider
} }
} else { } else {
for (const fix of fixes) { for (const fix of fixes) {
if ( if (fix && nodeAtPosition && fix.nodeType !== nodeAtPosition.nodeType) continue
fix &&
nodeAtPosition &&
fix.nodeType !== nodeAtPosition.nodeType
)
continue
else else
this.addQuickFix(actions, error, model.uri, { this.addQuickFix(actions, error, model.uri, {
title: fix.title, title: fix.title,
@ -106,12 +73,7 @@ implements monaco.languages.CodeActionProvider
* @param uri model URI * @param uri model URI
* @param fix details of quick fix to apply * @param fix details of quick fix to apply
*/ */
addQuickFix( addQuickFix(actions: monaco.languages.CodeAction[], error: monaco.editor.IMarkerData, uri: monaco.Uri, fix: Record<string, any>) {
actions: monaco.languages.CodeAction[],
error: monaco.editor.IMarkerData,
uri: monaco.Uri,
fix: Record<string, any>
) {
const {id, title, range, text} = fix const {id, title, range, text} = fix
actions.push({ actions.push({
title, title,
@ -122,7 +84,7 @@ implements monaco.languages.CodeActionProvider
{ {
resource: uri, resource: uri,
textEdit: {range, text}, textEdit: {range, text},
versionId: id versionId: undefined
} }
] ]
}, },
@ -150,11 +112,7 @@ implements monaco.languages.CodeActionProvider
// Get last function parameter node // Get last function parameter node
const lastParamNode: Record<string, any> = paramNodes[paramNodes.length - 1] const lastParamNode: Record<string, any> = paramNodes[paramNodes.length - 1]
if (isOldAST) { if (isOldAST) {
const location: Record<string, any> = await this.props.plugin.call( const location: Record<string, any> = await this.props.plugin.call('codeParser', 'getLineColumnOfNode', lastParamNode)
'codeParser',
'getLineColumnOfNode',
lastParamNode
)
// Get end location of last function parameter, it returns end column of parameter name // Get end location of last function parameter, it returns end column of parameter name
lastParamEndLoc = location.end lastParamEndLoc = location.end
fixLineNumber = lastParamEndLoc.line + 1 fixLineNumber = lastParamEndLoc.line + 1
@ -164,24 +122,13 @@ implements monaco.languages.CodeActionProvider
fixLineNumber = lastParamEndLoc.line fixLineNumber = lastParamEndLoc.line
} }
const lineContent: string = model.getLineContent(fixLineNumber) const lineContent: string = model.getLineContent(fixLineNumber)
if (fix.id === 5 && lineContent.includes(' view ')) if (fix.id === 5 && lineContent.includes(' view ')) msg = lineContent.replace('view', 'pure')
msg = lineContent.replace('view', 'pure') else if (isOldAST) msg = lineContent.substring(0, lastParamEndLoc.column + 2) + fix.message + lineContent.substring(lastParamEndLoc.column + 1, lineContent.length)
else if (isOldAST)
msg =
lineContent.substring(0, lastParamEndLoc.column + 2) +
fix.message +
lineContent.substring(lastParamEndLoc.column + 1, lineContent.length)
else else
msg = msg =
lineContent.substring( lineContent.substring(0, lastParamEndLoc.column + lastParamNode.name.length + 2) +
0,
lastParamEndLoc.column + lastParamNode.name.length + 2
) +
fix.message + fix.message +
lineContent.substring( lineContent.substring(lastParamEndLoc.column + lastParamNode.name.length + 1, lineContent.length)
lastParamEndLoc.column + lastParamNode.name.length + 1,
lineContent.length
)
fix.range = { fix.range = {
startLineNumber: fixLineNumber, startLineNumber: fixLineNumber,
@ -210,11 +157,7 @@ implements monaco.languages.CodeActionProvider
): Promise<string> { ): Promise<string> {
let fixLineNumber: number, msg: string let fixLineNumber: number, msg: string
if (isOldAST) { if (isOldAST) {
const location: Record<string, any> = await this.props.plugin.call( const location: Record<string, any> = await this.props.plugin.call('codeParser', 'getLineColumnOfNode', nodeAtPosition)
'codeParser',
'getLineColumnOfNode',
nodeAtPosition
)
fixLineNumber = location.start.line + 1 fixLineNumber = location.start.line + 1
} else fixLineNumber = nodeAtPosition.loc.start.line } else fixLineNumber = nodeAtPosition.loc.start.line
@ -223,11 +166,7 @@ implements monaco.languages.CodeActionProvider
if (fix.id === 5 && lineContent.includes(' view ')) { if (fix.id === 5 && lineContent.includes(' view ')) {
msg = lineContent.replace('view', 'pure') msg = lineContent.replace('view', 'pure')
} else } else msg = lineContent.substring(0, i + 3) + fix.message + lineContent.substring(i + 3, lineContent.length)
msg =
lineContent.substring(0, i + 3) +
fix.message +
lineContent.substring(i + 3, lineContent.length)
fix.range = { fix.range = {
startLineNumber: fixLineNumber, startLineNumber: fixLineNumber,

Loading…
Cancel
Save