This repository has been archived by the owner on Feb 9, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3ca5e3c
commit 2bb4476
Showing
10 changed files
with
681 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<module type="PLUGIN_MODULE" version="4"> | ||
<component name="DevKit.ModuleBuildProperties" url="file://$MODULE_DIR$/resources/META-INF/plugin.xml" /> | ||
<component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
<exclude-output /> | ||
<content url="file://$MODULE_DIR$"> | ||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> | ||
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" /> | ||
</content> | ||
<orderEntry type="inheritedJdk" /> | ||
<orderEntry type="sourceFolder" forTests="false" /> | ||
<orderEntry type="module" module-name="neovim-intellij-client" /> | ||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.7.0" level="project" /> | ||
<orderEntry type="module" module-name="neovim-java-client" /> | ||
</component> | ||
</module> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
<idea-plugin version="2"> | ||
<id>NeovimIntellijComplete</id> | ||
<name>NeovimIntellijComplete</name> | ||
<version>1.0</version> | ||
<vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor> | ||
|
||
<description><![CDATA[ | ||
Enter short description for your plugin here.<br> | ||
<em>most HTML tags may be used</em> | ||
]]></description> | ||
|
||
<change-notes><![CDATA[ | ||
Add change notes here.<br> | ||
<em>most HTML tags may be used</em> | ||
]]> | ||
</change-notes> | ||
|
||
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description --> | ||
<idea-version since-build="141.0"/> | ||
|
||
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html | ||
on how to target different products --> | ||
<!-- uncomment to enable plugin in all products | ||
<depends>com.intellij.modules.lang</depends> | ||
--> | ||
|
||
<extensions defaultExtensionNs="com.intellij"> | ||
<!-- Add your extensions here --> | ||
</extensions> | ||
|
||
<actions> | ||
<!-- Add your actions here --> | ||
<action id="NeovimIntellijComplete" class="NeovimIntellijComplete" text="NeovimIntellijComplete" description="NeovimIntellijComplete"/> | ||
</actions> | ||
|
||
</idea-plugin> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
|
||
import com.intellij.analysis.AnalysisScope; | ||
import com.intellij.codeInsight.daemon.impl.DefaultHighlightInfoProcessor; | ||
import com.intellij.codeInsight.daemon.impl.LocalInspectionsPass; | ||
import com.intellij.codeInspection.InspectionManager; | ||
import com.intellij.codeInspection.InspectionProfile; | ||
import com.intellij.codeInspection.ex.GlobalInspectionContextImpl; | ||
import com.intellij.codeInspection.ex.InspectionManagerEx; | ||
import com.intellij.codeInspection.ex.InspectionToolWrapper; | ||
import com.intellij.openapi.editor.Document; | ||
import com.intellij.profile.codeInspection.InspectionProfileManager; | ||
import com.intellij.psi.PsiFile; | ||
|
||
import java.util.Arrays; | ||
import java.util.List; | ||
|
||
public class CodeInspector { | ||
public static List<Problem> inspect(PsiFile file) { | ||
// TODO: See the internals InspectionApplication.run() | ||
InspectionManagerEx manager = (InspectionManagerEx)InspectionManager.getInstance(file.getProject()); | ||
InspectionProfileManager profileManager = InspectionProfileManager.getInstance(); | ||
InspectionProfile profile = (InspectionProfile)profileManager.getProfile(manager.getCurrentProfile(), false); | ||
InspectionToolWrapper[] tools = profile.getInspectionTools(null); | ||
GlobalInspectionContextImpl context = manager.createNewGlobalContext(true); | ||
AnalysisScope scope = new AnalysisScope(file); | ||
Document document = file.getViewProvider().getDocument(); | ||
LocalInspectionsPass pass = new LocalInspectionsPass(file, document, 0, file.getTextLength(), LocalInspectionsPass.EMPTY_PRIORITY_RANGE, | ||
true, new DefaultHighlightInfoProcessor()); | ||
return Arrays.asList( | ||
new Problem(10, 4, "Undefined name 'foo'"), | ||
new Problem(12, 6, "Undefined name 'bar'") | ||
); | ||
} | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class DeopleteHelper { | ||
private List<DeopleteItem> items; | ||
|
||
public DeopleteHelper() { | ||
items = new ArrayList<DeopleteItem>(); | ||
} | ||
|
||
public void add(String word, String info, String kind) { | ||
for (DeopleteItem i : items) { | ||
if (i.getWord().equals(word)) { | ||
i.appendInfo(word + info); | ||
break; | ||
} | ||
} | ||
items.add(new DeopleteItem(word, word + info, kind)); | ||
} | ||
|
||
public DeopleteItem[] getItems() { | ||
return items.toArray(new DeopleteItem[]{}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import com.fasterxml.jackson.annotation.JsonProperty; | ||
|
||
public class DeopleteItem { | ||
|
||
@JsonProperty | ||
private String word; | ||
@JsonProperty | ||
private String info; | ||
@JsonProperty | ||
private String kind; | ||
|
||
public DeopleteItem( | ||
String word, | ||
String info, | ||
String kind) { | ||
this.word = word; | ||
this.info = info; | ||
this.kind = kind; | ||
} | ||
|
||
public String getWord() { | ||
return word; | ||
} | ||
|
||
public String getInfo() { | ||
return info; | ||
} | ||
|
||
// Appends info with Strings and newline | ||
public void appendInfo(String s) { | ||
this.info += '\n' + s; | ||
} | ||
|
||
public String getKind() { | ||
return kind; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
|
||
import com.intellij.codeInsight.completion.CompletionParameters; | ||
import com.intellij.codeInsight.completion.CompletionProgressIndicator; | ||
import com.intellij.codeInsight.completion.PrioritizedLookupElement; | ||
import com.intellij.codeInsight.completion.SmartCompletionDecorator; | ||
import com.intellij.codeInsight.lookup.Lookup; | ||
import com.intellij.codeInsight.lookup.LookupElement; | ||
import com.intellij.codeInsight.lookup.LookupElementPresentation; | ||
import com.intellij.openapi.diagnostic.Logger; | ||
import com.intellij.openapi.editor.Document; | ||
import com.intellij.openapi.util.Ref; | ||
import com.intellij.openapi.util.UserDataHolderBase; | ||
import com.intellij.psi.PsiFile; | ||
import com.intellij.util.containers.ContainerUtil; | ||
import com.intellij.util.keyFMap.KeyFMap; | ||
import com.intellij.util.ui.UIUtil; | ||
import org.jetbrains.annotations.NotNull; | ||
import com.intellij.openapi.util.Key; | ||
|
||
import java.util.Collection; | ||
import java.util.Hashtable; | ||
import java.util.List; | ||
|
||
@SuppressWarnings("UnusedDeclaration") | ||
public class EmbeditorRequestHandler { | ||
private final static Logger LOG = Logger.getInstance(EmbeditorRequestHandler.class); | ||
|
||
public Hashtable[] resolve(String path, String fileContent, int line, int column) { | ||
LOG.debug(String.format("resolve(%s:%d:%d)", path, line, column)); | ||
List<ResolveOutcome> resolveOutcomes = EmbeditorUtil.getResolveOutcomes(path, fileContent, line, column); | ||
Hashtable[] results = new Hashtable[resolveOutcomes.size()]; | ||
for (int i = 0; i < resolveOutcomes.size(); i++) { | ||
ResolveOutcome resolveOutcome = resolveOutcomes.get(i); | ||
Hashtable<String, Object> result = new Hashtable<String, Object>(); | ||
result.put("path", resolveOutcome.getFilePath()); | ||
result.put("line", resolveOutcome.getRow()); | ||
result.put("column", resolveOutcome.getColumn()); | ||
result.put("text", resolveOutcome.getText()); | ||
results[i] = result; | ||
} | ||
return results; | ||
} | ||
|
||
public int getCompletionStartOffsetInLine(String path, String fileContent, int line, int column) { | ||
LOG.debug(String.format("getCompletionStartOffsetInLine(%s:%d:%d)", path, line, column)); | ||
final Ref<Integer> integerRef = Ref.create(0); | ||
EmbeditorUtil.performCompletion(path, fileContent, line, column, new EmbeditorUtil.CompletionCallback() { | ||
@Override | ||
public void completionFinished(@NotNull CompletionParameters parameters, | ||
@NotNull CompletionProgressIndicator indicator, | ||
@NotNull Document document) { | ||
integerRef.set(EmbeditorUtil.getOffsetFromLineStart(parameters, document)); | ||
} | ||
}); | ||
return integerRef.get(); | ||
} | ||
|
||
public LookupElement[] getCompletionVariants(String path, String fileContent, int line, int column) { | ||
LOG.debug(String.format("getCompletionVariants(%s:%d:%d)", path, line, column)); | ||
final Collection<LookupElement> completionVariants = ContainerUtil.newLinkedList(); | ||
EmbeditorUtil.performCompletion(path, fileContent, line, column, new EmbeditorUtil.CompletionCallback() { | ||
@Override | ||
public void completionFinished(@NotNull CompletionParameters parameters, | ||
@NotNull CompletionProgressIndicator indicator, | ||
@NotNull Document document) { | ||
for (LookupElement item : indicator.getLookup().getItems()) { | ||
//completionVariants.add(item.getUserData(key).toString().replace("\u0000###", "").replace("###", "")); | ||
completionVariants.add(item); | ||
} | ||
} | ||
}); | ||
return completionVariants.toArray(new LookupElement[completionVariants.size()]); | ||
} | ||
|
||
public Hashtable[] inspectCode(final String path, String fileContent) { | ||
final Hashtable[][] resultsWrapper = new Hashtable[1][]; | ||
UIUtil.invokeAndWaitIfNeeded(new Runnable() { | ||
@Override | ||
public void run() { | ||
PsiFile file = EmbeditorUtil.findTargetFile(path); | ||
if (file != null) { | ||
List<Problem> problems = CodeInspector.inspect(file); | ||
Hashtable[] results = new Hashtable[problems.size()]; | ||
for (int i = 0; i < problems.size(); i++) { | ||
Problem problem = problems.get(i); | ||
Hashtable<String, Object> result = new Hashtable<String, Object>(); | ||
result.put("line", problem.getLine()); | ||
result.put("column", problem.getColumn()); | ||
result.put("text", problem.getText()); | ||
results[i] = result; | ||
} | ||
resultsWrapper[0] = results; | ||
} | ||
} | ||
}); | ||
return resultsWrapper[0]; | ||
} | ||
} |
Oops, something went wrong.