Unify script file extensions to "kts" so that IDEA, compiler and tests agree when to parse as SCRIPT.

Include kt* files into formatter test generation, to test scripting formatting
This commit is contained in:
Ilya Ryzhenkov
2014-03-19 11:14:03 +04:00
committed by Andrey Breslav
parent 4ba423ee16
commit 98c54f39bb
49 changed files with 58 additions and 52 deletions
@@ -144,9 +144,8 @@ public class JetCoreEnvironment {
applicationEnvironment.registerFileType(PlainTextFileType.INSTANCE, "xml");
applicationEnvironment.registerFileType(JetFileType.INSTANCE, "kt");
applicationEnvironment.registerFileType(JetFileType.INSTANCE, "kts");
applicationEnvironment.registerFileType(JetFileType.INSTANCE, "ktm");
applicationEnvironment.registerFileType(JetFileType.INSTANCE, JetParserDefinition.KTSCRIPT_FILE_SUFFIX); // should be renamed to kts
applicationEnvironment.registerFileType(JetFileType.INSTANCE, JetParserDefinition.STD_SCRIPT_SUFFIX); // should be renamed to kts
applicationEnvironment.registerParserDefinition(new JavaParserDefinition());
applicationEnvironment.registerParserDefinition(new JetParserDefinition());
@@ -47,6 +47,7 @@ import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilderDummy;
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.resolve.*;
@@ -209,7 +210,7 @@ public class ReplInterpreter {
}
fullText.append(line);
LightVirtualFile virtualFile = new LightVirtualFile("line" + lineNumber + ".ktscript", JetLanguage.INSTANCE, fullText.toString());
LightVirtualFile virtualFile = new LightVirtualFile("line" + lineNumber + JetParserDefinition.STD_SCRIPT_EXT, JetLanguage.INSTANCE, fullText.toString());
virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET);
JetFile psiFile = (JetFile) ((PsiFileFactoryImpl) PsiFileFactory.getInstance(jetCoreEnvironment.getProject())).trySetupPsiForFile(virtualFile, JetLanguage.INSTANCE, true, false);
@@ -26,7 +26,6 @@ import org.jetbrains.annotations.NotNull;
public class JetParser implements PsiParser {
public static final String STD_SCRIPT_EXT = "." + JetParserDefinition.KTSCRIPT_FILE_SUFFIX;
private final JetScriptDefinitionProvider scriptDefinitionProvider;
public JetParser(Project project) {
@@ -43,7 +42,8 @@ public class JetParser implements PsiParser {
@NotNull
public ASTNode parse(IElementType iElementType, PsiBuilder psiBuilder, PsiFile psiFile) {
JetParsing jetParsing = JetParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));
if (scriptDefinitionProvider != null && scriptDefinitionProvider.isScript(psiFile) || psiFile.getName().endsWith(STD_SCRIPT_EXT)) {
if (scriptDefinitionProvider != null && scriptDefinitionProvider.isScript(psiFile)
|| psiFile.getName().endsWith(JetParserDefinition.STD_SCRIPT_EXT)) {
jetParsing.parseScript();
}
else {
@@ -40,7 +40,8 @@ import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.JetLanguage;
public class JetParserDefinition implements ParserDefinition {
public static final String KTSCRIPT_FILE_SUFFIX = "ktscript";
public static final String STD_SCRIPT_SUFFIX = "kts";
public static final String STD_SCRIPT_EXT = "." + STD_SCRIPT_SUFFIX;
public JetParserDefinition() {
//todo: ApplicationManager.getApplication() is null during JetParsingTest setting up
@@ -29,10 +29,10 @@ public class JetScriptDefinitionProvider {
private final HashMap<String,JetScriptDefinition> scripts = new HashMap<String, JetScriptDefinition>();
private final HashSet<PsiFile> scriptsFiles = new HashSet<PsiFile>();
private static final JetScriptDefinition standardScript = new JetScriptDefinition(".ktscript", Collections.<AnalyzerScriptParameter>emptyList());
private static final JetScriptDefinition standardScript = new JetScriptDefinition(JetParserDefinition.STD_SCRIPT_EXT, Collections.<AnalyzerScriptParameter>emptyList());
public JetScriptDefinitionProvider() {
// .ktscript will take analyzer parameters explicitly specified on compilation
// .kts will take analyzer parameters explicitly specified on compilation
addScriptDefinition(standardScript);
}
@@ -1,3 +1,3 @@
-printArgs
-script
$TESTDATA_DIR$/hello.ktscript
$TESTDATA_DIR$/hello.kts
+1 -1
View File
@@ -1,3 +1,3 @@
INFO: Invoking compiler org.jetbrains.jet.cli.jvm.K2JVMCompiler with arguments -printArgs -script compiler/testData/cli/jvm/hello.ktscript
INFO: Invoking compiler org.jetbrains.jet.cli.jvm.K2JVMCompiler with arguments -printArgs -script compiler/testData/cli/jvm/hello.kts
hello
OK
+1 -1
View File
@@ -1,4 +1,4 @@
-script
$TESTDATA_DIR$/script.ktscript
$TESTDATA_DIR$/script.kts
hi
there
@@ -1,4 +1,4 @@
JetFile: ComplexScript.ktscript
JetFile: ComplexScript.kts
PACKAGE_DIRECTIVE
<empty list>
SCRIPT
+1 -1
View File
@@ -1,4 +1,4 @@
JetFile: Import.ktscript
JetFile: Import.kts
PACKAGE_DIRECTIVE
<empty list>
SCRIPT
+1 -1
View File
@@ -1,4 +1,4 @@
JetFile: Shebang.ktscript
JetFile: Shebang.kts
PsiComment(SHEBANG_COMMENT)('#!/usr/bin/env kotlin')
PsiWhiteSpace('\n\n')
PACKAGE_DIRECTIVE
@@ -1,4 +1,4 @@
JetFile: ShebangIncorrect.ktscript
JetFile: ShebangIncorrect.kts
PACKAGE_DIRECTIVE
<empty list>
SCRIPT
@@ -1,4 +1,4 @@
JetFile: SimpleScript.ktscript
JetFile: SimpleScript.kts
PACKAGE_DIRECTIVE
<empty list>
SCRIPT
+1 -1
View File
@@ -1,6 +1,6 @@
>>> fun foo() = 765
null
>>> foo(1)
ERROR: /line2.ktscript: (1, 5) Too many arguments for internal final fun foo(): kotlin.Int defined in <script>
ERROR: /line2.kts: (1, 5) Too many arguments for internal final fun foo(): kotlin.Int defined in <script>
>>> foo()
765
+2 -2
View File
@@ -1,6 +1,6 @@
>>> )(
ERROR: /line1.ktscript: (1, 1) Expecting an element
ERROR: /line1.ktscript: (1, 3) Expecting an expression
ERROR: /line1.kts: (1, 1) Expecting an element
ERROR: /line1.kts: (1, 3) Expecting an expression
>>> fun foo() = 98
null
>>> foo()
@@ -34,7 +34,7 @@ import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName;
public abstract class JetTestCaseBuilder {
public static final FilenameFilter KOTLIN_FILTER = filterByExtension("kt", JetParserDefinition.KTSCRIPT_FILE_SUFFIX);
public static final FilenameFilter KOTLIN_FILTER = filterByExtension("kt", JetParserDefinition.STD_SCRIPT_SUFFIX);
@NotNull
public static FilenameFilter filterByExtension(@NotNull final String... extensions) {
@@ -44,14 +44,14 @@ import java.util.List;
public class ScriptTest {
@Test
public void testScript() throws Exception {
Class<?> aClass = compileScript("fib.ktscript", numIntParam(), Collections.<JetScriptDefinition>emptyList());
Class<?> aClass = compileScript("fib.kts", numIntParam(), Collections.<JetScriptDefinition>emptyList());
Assert.assertNotNull(aClass);
aClass.getConstructor(int.class).newInstance(4);
}
@Test
public void testScriptWithPackage() throws Exception {
Class<?> aClass = compileScript("fib.pkg.ktscript", numIntParam(), Collections.<JetScriptDefinition>emptyList());
Class<?> aClass = compileScript("fib.pkg.kts", numIntParam(), Collections.<JetScriptDefinition>emptyList());
Assert.assertNotNull(aClass);
aClass.getConstructor(int.class).newInstance(4);
}
@@ -7124,28 +7124,28 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
@TestMetadata("compiler/testData/diagnostics/tests/script")
public static class Script extends AbstractJetDiagnosticsTest {
@TestMetadata("AccessForwardDeclarationInScript.ktscript")
@TestMetadata("AccessForwardDeclarationInScript.kts")
public void testAccessForwardDeclarationInScript() throws Exception {
doTest("compiler/testData/diagnostics/tests/script/AccessForwardDeclarationInScript.ktscript");
doTest("compiler/testData/diagnostics/tests/script/AccessForwardDeclarationInScript.kts");
}
public void testAllFilesPresentInScript() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/diagnostics/tests/script"), Pattern.compile("^(.+)\\.ktscript$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/diagnostics/tests/script"), Pattern.compile("^(.+)\\.kts$"), true);
}
@TestMetadata("ComplexScript.ktscript")
@TestMetadata("ComplexScript.kts")
public void testComplexScript() throws Exception {
doTest("compiler/testData/diagnostics/tests/script/ComplexScript.ktscript");
doTest("compiler/testData/diagnostics/tests/script/ComplexScript.kts");
}
@TestMetadata("imports.ktscript")
@TestMetadata("imports.kts")
public void testImports() throws Exception {
doTest("compiler/testData/diagnostics/tests/script/imports.ktscript");
doTest("compiler/testData/diagnostics/tests/script/imports.kts");
}
@TestMetadata("SimpleScript.ktscript")
@TestMetadata("SimpleScript.kts")
public void testSimpleScript() throws Exception {
doTest("compiler/testData/diagnostics/tests/script/SimpleScript.ktscript");
doTest("compiler/testData/diagnostics/tests/script/SimpleScript.kts");
}
}
@@ -97,58 +97,58 @@ public class ScriptGenTest extends CodegenTestCase {
}
public void testHelloWorld() {
blackBoxScript("script/helloWorld.ktscript");
blackBoxScript("script/helloWorld.kts");
}
public void testString() {
blackBoxScript("script/string.ktscript");
blackBoxScript("script/string.kts");
}
public void testTopLevelFunction() throws Exception {
blackBoxScript("script/topLevelFunction.ktscript");
blackBoxScript("script/topLevelFunction.kts");
Method method = scriptInstance.getClass().getMethod("factorial", new Class<?>[]{ int.class });
Object r = method.invoke(scriptInstance, 4);
assertEquals(24, r);
}
public void testTopLevelFunctionClosure() {
blackBoxScript("script/topLevelFunctionClosure.ktscript");
blackBoxScript("script/topLevelFunctionClosure.kts");
}
public void testSecondLevelFunction() {
blackBoxScript("script/secondLevelFunction.ktscript");
blackBoxScript("script/secondLevelFunction.kts");
}
public void testSecondLevelFunctionClosure() {
blackBoxScript("script/secondLevelFunctionClosure.ktscript");
blackBoxScript("script/secondLevelFunctionClosure.kts");
}
public void testSecondLevelVal() {
blackBoxScript("script/secondLevelVal.ktscript");
blackBoxScript("script/secondLevelVal.kts");
}
public void testTopLevelProperty() {
blackBoxScript("script/topLevelProperty.ktscript");
blackBoxScript("script/topLevelProperty.kts");
}
public void testScriptParameter() {
blackBoxScript("script/parameter.ktscript");
blackBoxScript("script/parameter.kts");
}
public void testScriptParameterLong() {
blackBoxScript("script/parameterLong.ktscript");
blackBoxScript("script/parameterLong.kts");
}
public void testScriptParameterArray() {
blackBoxScript("script/parameterArray.ktscript");
blackBoxScript("script/parameterArray.kts");
}
public void testScriptParameterClosure() {
blackBoxScript("script/parameterClosure.ktscript");
blackBoxScript("script/parameterClosure.kts");
}
public void testEmpty() {
blackBoxScript("script/empty.ktscript");
blackBoxScript("script/empty.kts");
}
public void testLanguage() {
@@ -185,7 +185,7 @@ public class ScriptGenTest extends CodegenTestCase {
public void testDependentScripts() {
JetScriptDefinitionProvider.getInstance(myEnvironment.getProject()).addScriptDefinition(FIB_SCRIPT_DEFINITION);
loadFiles("script/fibwp.lang.kt", "script/fibwprunner.ktscript");
loadFiles("script/fibwp.lang.kt", "script/fibwprunner.kts");
Class aClass = generateClass("Fibwprunner");
try {
Constructor constructor = aClass.getConstructor();
@@ -47,7 +47,7 @@ public abstract class AbstractLazyResolveDiagnosticsTest extends BaseDiagnostics
PackageViewDescriptor expected = eagerModule.getPackage(FqName.ROOT);
PackageViewDescriptor actual = lazyModule.getPackage(FqName.ROOT);
String txtFileRelativePath = path.replaceAll("\\.kt$|\\.ktscript", ".txt");
String txtFileRelativePath = path.replaceAll("\\.kt$|\\.kts$", ".txt");
File txtFile = new File("compiler/testData/lazyResolve/diagnostics/" + txtFileRelativePath);
// Only recurse into those packages mentioned in the files
@@ -109,7 +109,7 @@ fun main(args: Array<String>) {
testClass(javaClass<AbstractJetDiagnosticsTest>()) {
model("diagnostics/tests")
model("diagnostics/tests/script", extension = "ktscript")
model("diagnostics/tests/script", extension = "kts")
model("codegen/box/functions/tailRecursion")
}
@@ -469,8 +469,8 @@ fun main(args: Array<String>) {
}
testClass(javaClass<AbstractJetFormatterTest>()) {
model("formatter", pattern = """^([^\.]+)\.after.kt$""")
model("formatter", pattern = """^([^\.]+)\.after.inv.kt$""",
model("formatter", pattern = """^([^\.]+)\.after\.kt.*$""")
model("formatter", pattern = """^([^\.]+)\.after\.inv\.kt.*$""",
testMethod = "doTestInverted", testClassName = "FormatterInverted")
}
@@ -36,7 +36,7 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
@InnerTestClasses({Formatter.ModifierList.class})
public static class Formatter extends AbstractJetFormatterTest {
public void testAllFilesPresentInFormatter() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/formatter"), Pattern.compile("^([^\\.]+)\\.after.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/formatter"), Pattern.compile("^([^\\.]+)\\.after\\.kt.*$"), true);
}
@TestMetadata("BlockFor.after.kt")
@@ -219,6 +219,11 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
doTest("idea/testData/formatter/SaveSpacesInDocComments.after.kt");
}
@TestMetadata("Script.after.kts")
public void testScript() throws Exception {
doTest("idea/testData/formatter/Script.after.kts");
}
@TestMetadata("SingleLineFunctionLiteral.after.kt")
public void testSingleLineFunctionLiteral() throws Exception {
doTest("idea/testData/formatter/SingleLineFunctionLiteral.after.kt");
@@ -297,7 +302,7 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
@TestMetadata("idea/testData/formatter/modifierList")
public static class ModifierList extends AbstractJetFormatterTest {
public void testAllFilesPresentInModifierList() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/formatter/modifierList"), Pattern.compile("^([^\\.]+)\\.after.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/formatter/modifierList"), Pattern.compile("^([^\\.]+)\\.after\\.kt.*$"), true);
}
@TestMetadata("funAnnotationBeforeAnnotation.after.kt")
@@ -394,7 +399,7 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
@InnerTestClasses({})
public static class FormatterInverted extends AbstractJetFormatterTest {
public void testAllFilesPresentInFormatterInverted() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/formatter"), Pattern.compile("^([^\\.]+)\\.after.inv.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/formatter"), Pattern.compile("^([^\\.]+)\\.after\\.inv\\.kt.*$"), true);
}
@TestMetadata("CatchFinallyOnNewLine.after.inv.kt")