WIP: snippet infrastructure

This commit is contained in:
Kris De Volder
2017-09-20 11:19:03 -07:00
parent eceb3126c3
commit ea046efae8
4 changed files with 135 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
/*******************************************************************************
* Copyright (c) 2017 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.handlers;
import org.eclipse.lsp4j.CompletionItemKind;
import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits;
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal;
import org.springframework.ide.vscode.commons.util.Renderable;
import org.springframework.ide.vscode.commons.util.text.IDocument;
public class SimpleCompletionFactory {
public ICompletionProposal simpleProposal(IDocument doc, int offset, String query, CompletionItemKind kind, String value, String detail, Renderable info) {
DocumentEdits edits = new DocumentEdits(doc);
edits.replace(offset-query.length(), offset, value);
return new ICompletionProposal() {
@Override
public DocumentEdits getTextEdit() {
return edits;
}
@Override
public String getLabel() {
return value;
}
@Override
public CompletionItemKind getKind() {
return kind;
}
@Override
public Renderable getDocumentation() {
return info;
}
@Override
public String getDetail() {
return detail;
}
};
}
}

View File

@@ -0,0 +1,17 @@
/*******************************************************************************
* Copyright (c) 2017 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.snippets;
public class JavaSnippet {
private SnippetContext context;
}

View File

@@ -0,0 +1,17 @@
/*******************************************************************************
* Copyright (c) 2017 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.snippets;
import org.eclipse.jdt.core.dom.ASTNode;
public interface SnippetContext {
boolean appliesTo(ASTNode node);
}

View File

@@ -0,0 +1,50 @@
<!-- These are the original templates. This file will be deleted. It just here for 'inspiration' -->
<templates>
<template autoinsert="true"
id="org.springframework.ide.eclipse.boot.templates.RequestMapping"
name="RequestMapping method" context="boot-members" description="RequestMapping method"
enabled="true">${x:import(org.springframework.web.bind.annotation.RequestMapping,
org.springframework.web.bind.annotation.RequestMethod,
org.springframework.web.bind.annotation.RequestParam)}@RequestMapping(value="${path}",
method=RequestMethod.${GET})
public ${SomeData} ${requestMethodName}(@RequestParam ${String} ${param}) {
return new ${SomeData}(${cursor});
}
</template>
<template autoinsert="true"
id="org.springframework.ide.eclipse.boot.templates.GetMapping" name="GetMapping method"
context="boot-members" description="GetMapping method" enabled="true">
${x:import(org.springframework.web.bind.annotation.GetMapping,
org.springframework.web.bind.annotation.RequestParam)}@GetMapping(value="${path}")
public ${SomeData} ${getMethodName}(@RequestParam ${String} ${param})
{
return new ${SomeData}(${cursor});
}
</template>
<template autoinsert="true"
id="org.springframework.ide.eclipse.boot.templates.PostMapping" name="PostMapping method"
context="boot-members" description="PostMapping method" enabled="true">
${x:import(org.springframework.web.bind.annotation.PostMapping,
org.springframework.web.bind.annotation.RequestBody)}@PostMapping(value="${path}")
public ${SomeEnityData} ${postMethodName}(@RequestBody
${SomeEnityData} ${entity}) {
//TODO: process POST request
${cursor}
return ${entity};
}
</template>
<template autoinsert="true"
id="org.springframework.ide.eclipse.boot.templates.PutMapping" name="PutMapping method"
context="boot-members" description="PutMapping method" enabled="true">
${x:import(org.springframework.web.bind.annotation.PutMapping,
org.springframework.web.bind.annotation.RequestBody,
org.springframework.web.bind.annotation.PathVariable)}@PutMapping(value="${path}/{${id}}")
public ${SomeEnityData} ${putMethodName}(@PathVariable
${pvt:link(String,int,long)} ${id}, @RequestBody ${SomeEnityData}
${entity}) {
//TODO: process PUT request
${cursor}
return ${entity};
}
</template>
</templates>