Skip to content
33 changes: 33 additions & 0 deletions ...text.FLY.parent/org.xtext.FLY.ui/src/org/xtext/ui/contentassist/FLYProposalProvider.xtend
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,43 @@
*/
package org.xtext.ui.contentassist

import org.eclipse.emf.ecore.EObject
import org.eclipse.xtext.Assignment
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor
import org.eclipse.xtext.RuleCall

/**
* See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#content-assist
* on how to customize the content assistant.
*/
class FLYProposalProvider extends AbstractFLYProposalProvider {


override completeObjectLiteral_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
//super.completeObjectLiteral_Value(model, assignment, context, acceptor)


acceptor.accept(createCompletionProposal("alfredo", context))
}

override complete_VariableFunction(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
super.complete_VariableFunction(model, ruleCall, context, acceptor)
}


override completeMathFunction_Feature(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
super.completeMathFunction_Feature(model, assignment, context, acceptor)

for (var i = 0; i < Math.methods.length; i++) {
acceptor.accept(createCompletionProposal(Math.methods.get(i).name + "()", context))
}
}

override complete_MathFunction(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
for (var i = 0; i < Math.methods.length; i++) {
acceptor.accept(createCompletionProposal(Math.methods.get(i).name + "()", context))
}
}

}
142 changes: 129 additions & 13 deletions ...org.xtext.FLY.parent/org.xtext.FLY.ui/src/org/xtext/ui/quickfix/FLYQuickfixProvider.xtend
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,24 +1,140 @@
/*
* generated by Xtext 2.16.0
*/
package org.xtext.ui.quickfix

import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider
import org.eclipse.xtext.ui.editor.quickfix.Fix
import org.eclipse.xtext.validation.Issue
import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor
import org.xtext.validation.FLYValidationErrors

/**
* Custom quickfixes.
*
* See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#quick-fixes
*/
class FLYQuickfixProvider extends DefaultQuickfixProvider {

// @Fix(FLYValidator.INVALID_NAME)
// def capitalizeName(Issue issue, IssueResolutionAcceptor acceptor) {
// acceptor.accept(issue, 'Capitalize name', 'Capitalize the name.', 'upcase.png') [
// context |
// val xtextDocument = context.xtextDocument
// val firstLetter = xtextDocument.get(issue.offset, 1)
// xtextDocument.replace(issue.offset, 1, firstLetter.toUpperCase)
// ]
// }

@Fix(FLYValidationErrors.WRONG_AWS_DECLARATION)
def correctAWSEnvDeclaration(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Declare AWS environment', 'Delcare an AWS environment variable', '') [
context |
val expected = "type=\"aws\", profile=\"<profile>\", access_id_key=\"<id>\", secret_access_key=\"<secret>\", region=\"<region>\", language=\"<language>\", nthread=4, memory=256, seconds=1"
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset + 1, issue.length - 2, expected)
]
}

@Fix(FLYValidationErrors.WRONG_SMP_DECLARATION)
def correctSMPEnvDeclaration(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Declare SMP environment', 'Delcare an SMP environment variable', '') [
context |
val expected = "type=\"smp\", nthread=3"
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset + 1, issue.length - 2, expected)
]
}

@Fix(FLYValidationErrors.WRONG_AZURE_DECLARATION)
def correctAzureEnvDeclaration(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Declare Azure environment', 'Delcare an Azure environment variable', '') [
context |
val expected = "type=\"azure\", client_id=\"<client>\", tenant_id=\"<tenant>\", secret_key=\"<secret>\", subscription_id=\"<subscription>\", region=\"<region>\", language=\"<language>\", nthread=3, seconds=1"
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset + 1, issue.length - 2, expected)
]
}

@Fix(FLYValidationErrors.WARNING_UNCAPITALIZE_ENVIRONMENT)
def capitalizeEnvironmentVars(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Capitalize', 'Capitalize the first letter', '') [
context |
val xtextDocument = context.xtextDocument
var firstLetter = issue.getData().get(0).substring(0, 1)
xtextDocument.replace(issue.offset, 1, firstLetter.toUpperCase())
]
}

@Fix(FLYValidationErrors.CHANNEL_UNNECESSARY_ATTRS)
def removeUnnecessaryChannelAttributes(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Remove unnecessary attributes', 'Remove unnecessary attributes', '') [
context |
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset, issue.length, "[type=\"channel\"]")
]
}

@Fix(FLYValidationErrors.CHANNEL_UNNECESSARY_ENVIONMENTS)
def removeUnnecessaryChannelEnvironments(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Remove unnecessary environments', 'Remove unnecessary environments', '') [
context |
val xtextDocument = context.xtextDocument
var env = issue.data.get(0)
xtextDocument.replace(issue.offset, issue.length, "on " + env)
]
}

@Fix(FLYValidationErrors.UNNECESSARY_RANDOM_ATTRIBUTES)
def removeUnnecessaryRandomAttributes(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Remove unnecessary attributes', 'Remove random variable unnecessary attributes', '') [
context |
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset, issue.length, "[type=\"random\"]")
]
}

@Fix(FLYValidationErrors.FILE_DECLARATION_ERROR)
def correctFileDeclaration(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Declare File variable', 'Declare a File type variable', '') [
context |
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset, issue.length, "[type=\"file\", path=\"<file_path>\"]")
]
}

@Fix(FLYValidationErrors.DATAFRAME_DECLARATION_ERROR)
def correctDataframeDeclaration(Issue issue, IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, 'Declare Dataframe variable (1)',
'Declare a Dataframe type variable with string source', '') [
context |
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset, issue.length, "[type=\"dataframe\", name=\"<name>\", source=\"<source>\"]")
]

acceptor.accept(issue, 'Declare Dataframe variable (2)',
'Declare a Dataframe type variable with string source and optional attributes', '') [
context |
val xtextDocument = context.xtextDocument
val expected = "[type=\"dataframe\", name=\"<file_path>\", source=\"<source>\", sep=\"<separator>\", header=\"<header>\"]"
xtextDocument.replace(issue.offset, issue.length, expected)
]
acceptor.accept(issue, 'Declare Dataframe variable (3)',
'Declare a Dataframe type variable with file source', '') [
context |
val xtextDocument = context.xtextDocument
xtextDocument.replace(issue.offset, issue.length, "[type=\"dataframe\", name=\"<name>\", source=var_name]")
]

acceptor.accept(issue, 'Declare Dataframe variable (4)',
'Declare a Dataframe type variable with file source and optional attributes', '') [
context |
val xtextDocument = context.xtextDocument
val expected = "[type=\"dataframe\", name=\"<file_path>\", source=var_name, query=\"<query>\"]"
xtextDocument.replace(issue.offset, issue.length, expected)
]
}
}
















Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ Workflow {
generate = true
}

// validator={
// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
// composedCheck ="org.xtext.validation.FLYValidator"
// }
validator = {

composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.xtext.typing

import java.util.ArrayList
import java.util.Arrays
import java.util.List
import org.xtext.fLY.DeclarationObject
import org.xtext.fLY.VariableFunction
import org.xtext.fLY.MathFunction

class FlyMethodProvider {

public static val emptyList = new ArrayList<String>()
public static val queryMethods = Arrays.asList("execute")
public static val randomMethods = Arrays.asList("nextBoolean", "nextDouble", "nextInt")
public static val channelMethods = Arrays.asList("close")
public static val dataframeMethods = Arrays.asList("exportHeader", "export")

def dispatch List<String> methodsFor(VariableFunction l) {
var v = l.target
if (v.right instanceof DeclarationObject) {
return methodsFor(v.right as DeclarationObject)
}

return emptyList
}

def dispatch List<String> methodsFor(DeclarationObject d) {
if (d.features.length > 0 && d.features.get(0).feature == "type") {
switch d.features.get(0).value_s {
case "query": {
return queryMethods
}
case "random": {
return randomMethods
}
case "channel": {
return channelMethods
}
case "dataframe": {
return dataframeMethods
}
}
}

return emptyList
}

// def dispatch List<String> methodsFor(MathFunction f) {
//
// var ret = new ArrayList<String>()
//
// for (var i = 0; i < Math.methods.length; i++) {
// ret.add(Math.methods.get(i).name)
// }
//
// return ret
// }
}
Loading