added django facet detection in case of buildout

This commit is contained in:
Dmitry Trofimov
2010-08-27 21:55:14 +04:00
parent b69ec6aec0
commit 70fa29233f
4 changed files with 84 additions and 41 deletions
@@ -38,7 +38,7 @@ import java.util.regex.Pattern;
* User: dcheryasov
* Date: Jul 25, 2010 3:23:50 PM
*/
public class BuildoutFacet extends Facet<BuildoutFacetConfiguration> implements PythonPathContributingFacet {
public class BuildoutFacet extends Facet<BuildoutFacetConfiguration> implements PythonPathContributingFacet {
private static final Logger LOG = Logger.getInstance("#com.jetbrains.python.buildout.BuildoutFacet");
@NonNls private static final String BUILDOUT_CFG = "buildout.cfg";
@@ -60,10 +60,14 @@ public class BuildoutFacet extends Facet<BuildoutFacetConfiguration> implements
VirtualFile bin = baseDir.findChild("bin");
if (bin != null && bin.isDirectory()) {
final String exe;
if (SystemInfo.isWindows || SystemInfo.isOS2) exe = "buildout.exe";
else exe = "buildout";
if (SystemInfo.isWindows || SystemInfo.isOS2) {
exe = "buildout.exe";
}
else {
exe = "buildout";
}
VirtualFile runner = bin.findChild(exe);
if (runner != null && ! runner.isDirectory()) {
if (runner != null && !runner.isDirectory()) {
return runner;
}
}
@@ -97,6 +101,7 @@ public class BuildoutFacet extends Facet<BuildoutFacetConfiguration> implements
/**
* Extracts paths from given script, assuming sys.path[0:0] assignment.
*
* @param script
* @return extracted paths, or null if extraction fails.
*/
@@ -120,7 +125,9 @@ public class BuildoutFacet extends Facet<BuildoutFacetConfiguration> implements
ret.add(value);
pos = scanner.end();
}
else break; // we've matched the ']', it's group(4)
else {
break;
} // we've matched the ']', it's group(4)
}
if (did_nothing) return null;
}
@@ -170,19 +177,26 @@ public class BuildoutFacet extends Facet<BuildoutFacetConfiguration> implements
@Nullable
public BuildoutCfgFile getConfigFile() {
public File getConfigFile() {
final String scriptName = getConfiguration().getScriptName();
if (!StringUtil.isEmpty(scriptName)) {
File cfg = new File(new File(scriptName).getParentFile().getParentFile(), BUILDOUT_CFG);
if (cfg.exists()) {
final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(cfg);
if (vFile != null) {
final PsiFile psiFile = PsiManager.getInstance(getModule().getProject()).findFile(vFile);
if (psiFile instanceof BuildoutCfgFile) {
return (BuildoutCfgFile) psiFile;
}
return new File(new File(scriptName).getParentFile().getParentFile(), BUILDOUT_CFG);
}
return null;
}
@Nullable
public BuildoutCfgFile getConfigPsiFile() {
File cfg = getConfigFile();
if (cfg.exists()) {
final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(cfg);
if (vFile != null) {
final PsiFile psiFile = PsiManager.getInstance(getModule().getProject()).findFile(vFile);
if (psiFile instanceof BuildoutCfgFile) {
return (BuildoutCfgFile)psiFile;
}
}
}
return null;
}
@@ -0,0 +1,55 @@
package com.jetbrains.python.buildout;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.jetbrains.python.buildout.config.BuildoutCfgLanguage;
import com.jetbrains.python.buildout.config.psi.impl.BuildoutCfgFile;
import com.jetbrains.python.buildout.config.psi.impl.BuildoutCfgSection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.List;
/**
* @author traff
*/
public class BuildoutUtil {
private static final String RECIPE = "recipe";
private static final String DJANGO_RECIPE = "djangorecipe";
@Nullable
public static BuildoutCfgSection getDjangoSection(@NotNull BuildoutCfgFile configFile) {
List<String> parts = configFile.getParts();
for (String part : parts) {
final BuildoutCfgSection section = configFile.findSectionByName(part);
if (section != null && DJANGO_RECIPE.equals(section.getOptionValue(RECIPE))) {
return section;
}
}
return null;
}
@Nullable
public static BuildoutCfgFile readBuildOutCfgFile(BuildoutFacet buildoutFacet) {
File cfg = buildoutFacet.getConfigFile();
if (cfg != null && cfg.exists()) {
try {
char[] scriptText = FileUtil.loadFileText(cfg);
final PsiFile configFile = PsiFileFactory
.getInstance(buildoutFacet.getModule().getProject()).createFileFromText("buildout.cfg",
BuildoutCfgLanguage.INSTANCE, new String(scriptText));
if (configFile != null && configFile instanceof BuildoutCfgFile) {
return (BuildoutCfgFile)configFile;
}
}
catch (Exception e) {
}
}
return null;
}
}
@@ -36,10 +36,7 @@ public class BuildoutCfgASTFactory implements BuildoutCfgElementTypes, BuildoutC
if (type == SECTION_NAME) {
return new BuildoutCfgSectionHeaderName(node);
}
//if (type == KEY_CHARACTERS || type == VALUE_CHARACTERS) {
// return new BuildoutCfgCharacters(node);
//}
return new BuildoutCfgPsiElement(node);
}
}
@@ -1,23 +0,0 @@
package com.jetbrains.python.buildout.config.psi.impl;
import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
/**
* @author traff
*/
public class BuildoutCfgCharacters extends BuildoutCfgPsiElement {
public BuildoutCfgCharacters(@NotNull final ASTNode node) {
super(node);
}
public String getCharacters() {
return null;
}
@Override
public String toString() {
return "BuildoutCfgCharacters:" + getNode().getElementType().toString();
}
}