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(PlainTextFileType.INSTANCE, "xml");
applicationEnvironment.registerFileType(JetFileType.INSTANCE, "kt"); applicationEnvironment.registerFileType(JetFileType.INSTANCE, "kt");
applicationEnvironment.registerFileType(JetFileType.INSTANCE, "kts");
applicationEnvironment.registerFileType(JetFileType.INSTANCE, "ktm"); 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 JavaParserDefinition());
applicationEnvironment.registerParserDefinition(new JetParserDefinition()); 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.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor; import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilderDummy; 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.JetFile;
import org.jetbrains.jet.lang.psi.JetScript; import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.*;
@@ -209,7 +210,7 @@ public class ReplInterpreter {
} }
fullText.append(line); 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); virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET);
JetFile psiFile = (JetFile) ((PsiFileFactoryImpl) PsiFileFactory.getInstance(jetCoreEnvironment.getProject())).trySetupPsiForFile(virtualFile, JetLanguage.INSTANCE, true, false); 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 class JetParser implements PsiParser {
public static final String STD_SCRIPT_EXT = "." + JetParserDefinition.KTSCRIPT_FILE_SUFFIX;
private final JetScriptDefinitionProvider scriptDefinitionProvider; private final JetScriptDefinitionProvider scriptDefinitionProvider;
public JetParser(Project project) { public JetParser(Project project) {
@@ -43,7 +42,8 @@ public class JetParser implements PsiParser {
@NotNull @NotNull
public ASTNode parse(IElementType iElementType, PsiBuilder psiBuilder, PsiFile psiFile) { public ASTNode parse(IElementType iElementType, PsiBuilder psiBuilder, PsiFile psiFile) {
JetParsing jetParsing = JetParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder)); 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(); jetParsing.parseScript();
} }
else { else {
@@ -40,7 +40,8 @@ import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.JetLanguage; import org.jetbrains.jet.plugin.JetLanguage;
public class JetParserDefinition implements ParserDefinition { 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() { public JetParserDefinition() {
//todo: ApplicationManager.getApplication() is null during JetParsingTest setting up //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 HashMap<String,JetScriptDefinition> scripts = new HashMap<String, JetScriptDefinition>();
private final HashSet<PsiFile> scriptsFiles = new HashSet<PsiFile>(); 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() { public JetScriptDefinitionProvider() {
// .ktscript will take analyzer parameters explicitly specified on compilation // .kts will take analyzer parameters explicitly specified on compilation
addScriptDefinition(standardScript); addScriptDefinition(standardScript);
} }
@@ -1,3 +1,3 @@
-printArgs -printArgs
-script -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 hello
OK OK
+1 -1
View File
@@ -1,4 +1,4 @@
-script -script
$TESTDATA_DIR$/script.ktscript $TESTDATA_DIR$/script.kts
hi hi
there there
@@ -1,4 +1,4 @@
JetFile: ComplexScript.ktscript JetFile: ComplexScript.kts
PACKAGE_DIRECTIVE PACKAGE_DIRECTIVE
<empty list> <empty list>
SCRIPT SCRIPT
+1 -1
View File
@@ -1,4 +1,4 @@
JetFile: Import.ktscript JetFile: Import.kts
PACKAGE_DIRECTIVE PACKAGE_DIRECTIVE
<empty list> <empty list>
SCRIPT SCRIPT
+1 -1
View File
@@ -1,4 +1,4 @@
JetFile: Shebang.ktscript JetFile: Shebang.kts
PsiComment(SHEBANG_COMMENT)('#!/usr/bin/env kotlin') PsiComment(SHEBANG_COMMENT)('#!/usr/bin/env kotlin')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
PACKAGE_DIRECTIVE PACKAGE_DIRECTIVE
@@ -1,4 +1,4 @@
JetFile: ShebangIncorrect.ktscript JetFile: ShebangIncorrect.kts
PACKAGE_DIRECTIVE PACKAGE_DIRECTIVE
<empty list> <empty list>
SCRIPT SCRIPT
@@ -1,4 +1,4 @@
JetFile: SimpleScript.ktscript JetFile: SimpleScript.kts
PACKAGE_DIRECTIVE PACKAGE_DIRECTIVE
<empty list> <empty list>
SCRIPT SCRIPT
+1 -1
View File
@@ -1,6 +1,6 @@
>>> fun foo() = 765 >>> fun foo() = 765
null null
>>> foo(1) >>> 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() >>> foo()
765 765
+2 -2
View File
@@ -1,6 +1,6 @@
>>> )( >>> )(
ERROR: /line1.ktscript: (1, 1) Expecting an element ERROR: /line1.kts: (1, 1) Expecting an element
ERROR: /line1.ktscript: (1, 3) Expecting an expression ERROR: /line1.kts: (1, 3) Expecting an expression
>>> fun foo() = 98 >>> fun foo() = 98
null null
>>> foo() >>> foo()
@@ -34,7 +34,7 @@ import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName;
public abstract class JetTestCaseBuilder { 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 @NotNull
public static FilenameFilter filterByExtension(@NotNull final String... extensions) { public static FilenameFilter filterByExtension(@NotNull final String... extensions) {
@@ -44,14 +44,14 @@ import java.util.List;
public class ScriptTest { public class ScriptTest {
@Test @Test
public void testScript() throws Exception { 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); Assert.assertNotNull(aClass);
aClass.getConstructor(int.class).newInstance(4); aClass.getConstructor(int.class).newInstance(4);
} }
@Test @Test
public void testScriptWithPackage() throws Exception { 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); Assert.assertNotNull(aClass);
aClass.getConstructor(int.class).newInstance(4); aClass.getConstructor(int.class).newInstance(4);
} }
@@ -7124,28 +7124,28 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
@TestMetadata("compiler/testData/diagnostics/tests/script") @TestMetadata("compiler/testData/diagnostics/tests/script")
public static class Script extends AbstractJetDiagnosticsTest { public static class Script extends AbstractJetDiagnosticsTest {
@TestMetadata("AccessForwardDeclarationInScript.ktscript") @TestMetadata("AccessForwardDeclarationInScript.kts")
public void testAccessForwardDeclarationInScript() throws Exception { 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 { 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 { 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 { 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 { 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() { public void testHelloWorld() {
blackBoxScript("script/helloWorld.ktscript"); blackBoxScript("script/helloWorld.kts");
} }
public void testString() { public void testString() {
blackBoxScript("script/string.ktscript"); blackBoxScript("script/string.kts");
} }
public void testTopLevelFunction() throws Exception { public void testTopLevelFunction() throws Exception {
blackBoxScript("script/topLevelFunction.ktscript"); blackBoxScript("script/topLevelFunction.kts");
Method method = scriptInstance.getClass().getMethod("factorial", new Class<?>[]{ int.class }); Method method = scriptInstance.getClass().getMethod("factorial", new Class<?>[]{ int.class });
Object r = method.invoke(scriptInstance, 4); Object r = method.invoke(scriptInstance, 4);
assertEquals(24, r); assertEquals(24, r);
} }
public void testTopLevelFunctionClosure() { public void testTopLevelFunctionClosure() {
blackBoxScript("script/topLevelFunctionClosure.ktscript"); blackBoxScript("script/topLevelFunctionClosure.kts");
} }
public void testSecondLevelFunction() { public void testSecondLevelFunction() {
blackBoxScript("script/secondLevelFunction.ktscript"); blackBoxScript("script/secondLevelFunction.kts");
} }
public void testSecondLevelFunctionClosure() { public void testSecondLevelFunctionClosure() {
blackBoxScript("script/secondLevelFunctionClosure.ktscript"); blackBoxScript("script/secondLevelFunctionClosure.kts");
} }
public void testSecondLevelVal() { public void testSecondLevelVal() {
blackBoxScript("script/secondLevelVal.ktscript"); blackBoxScript("script/secondLevelVal.kts");
} }
public void testTopLevelProperty() { public void testTopLevelProperty() {
blackBoxScript("script/topLevelProperty.ktscript"); blackBoxScript("script/topLevelProperty.kts");
} }
public void testScriptParameter() { public void testScriptParameter() {
blackBoxScript("script/parameter.ktscript"); blackBoxScript("script/parameter.kts");
} }
public void testScriptParameterLong() { public void testScriptParameterLong() {
blackBoxScript("script/parameterLong.ktscript"); blackBoxScript("script/parameterLong.kts");
} }
public void testScriptParameterArray() { public void testScriptParameterArray() {
blackBoxScript("script/parameterArray.ktscript"); blackBoxScript("script/parameterArray.kts");
} }
public void testScriptParameterClosure() { public void testScriptParameterClosure() {
blackBoxScript("script/parameterClosure.ktscript"); blackBoxScript("script/parameterClosure.kts");
} }
public void testEmpty() { public void testEmpty() {
blackBoxScript("script/empty.ktscript"); blackBoxScript("script/empty.kts");
} }
public void testLanguage() { public void testLanguage() {
@@ -185,7 +185,7 @@ public class ScriptGenTest extends CodegenTestCase {
public void testDependentScripts() { public void testDependentScripts() {
JetScriptDefinitionProvider.getInstance(myEnvironment.getProject()).addScriptDefinition(FIB_SCRIPT_DEFINITION); 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"); Class aClass = generateClass("Fibwprunner");
try { try {
Constructor constructor = aClass.getConstructor(); Constructor constructor = aClass.getConstructor();
@@ -47,7 +47,7 @@ public abstract class AbstractLazyResolveDiagnosticsTest extends BaseDiagnostics
PackageViewDescriptor expected = eagerModule.getPackage(FqName.ROOT); PackageViewDescriptor expected = eagerModule.getPackage(FqName.ROOT);
PackageViewDescriptor actual = lazyModule.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); File txtFile = new File("compiler/testData/lazyResolve/diagnostics/" + txtFileRelativePath);
// Only recurse into those packages mentioned in the files // Only recurse into those packages mentioned in the files
@@ -109,7 +109,7 @@ fun main(args: Array<String>) {
testClass(javaClass<AbstractJetDiagnosticsTest>()) { testClass(javaClass<AbstractJetDiagnosticsTest>()) {
model("diagnostics/tests") model("diagnostics/tests")
model("diagnostics/tests/script", extension = "ktscript") model("diagnostics/tests/script", extension = "kts")
model("codegen/box/functions/tailRecursion") model("codegen/box/functions/tailRecursion")
} }
@@ -469,8 +469,8 @@ fun main(args: Array<String>) {
} }
testClass(javaClass<AbstractJetFormatterTest>()) { testClass(javaClass<AbstractJetFormatterTest>()) {
model("formatter", pattern = """^([^\.]+)\.after.kt$""") model("formatter", pattern = """^([^\.]+)\.after\.kt.*$""")
model("formatter", pattern = """^([^\.]+)\.after.inv.kt$""", model("formatter", pattern = """^([^\.]+)\.after\.inv\.kt.*$""",
testMethod = "doTestInverted", testClassName = "FormatterInverted") testMethod = "doTestInverted", testClassName = "FormatterInverted")
} }
@@ -36,7 +36,7 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
@InnerTestClasses({Formatter.ModifierList.class}) @InnerTestClasses({Formatter.ModifierList.class})
public static class Formatter extends AbstractJetFormatterTest { public static class Formatter extends AbstractJetFormatterTest {
public void testAllFilesPresentInFormatter() throws Exception { 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") @TestMetadata("BlockFor.after.kt")
@@ -219,6 +219,11 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
doTest("idea/testData/formatter/SaveSpacesInDocComments.after.kt"); 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") @TestMetadata("SingleLineFunctionLiteral.after.kt")
public void testSingleLineFunctionLiteral() throws Exception { public void testSingleLineFunctionLiteral() throws Exception {
doTest("idea/testData/formatter/SingleLineFunctionLiteral.after.kt"); doTest("idea/testData/formatter/SingleLineFunctionLiteral.after.kt");
@@ -297,7 +302,7 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
@TestMetadata("idea/testData/formatter/modifierList") @TestMetadata("idea/testData/formatter/modifierList")
public static class ModifierList extends AbstractJetFormatterTest { public static class ModifierList extends AbstractJetFormatterTest {
public void testAllFilesPresentInModifierList() throws Exception { 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") @TestMetadata("funAnnotationBeforeAnnotation.after.kt")
@@ -394,7 +399,7 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
@InnerTestClasses({}) @InnerTestClasses({})
public static class FormatterInverted extends AbstractJetFormatterTest { public static class FormatterInverted extends AbstractJetFormatterTest {
public void testAllFilesPresentInFormatterInverted() throws Exception { 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") @TestMetadata("CatchFinallyOnNewLine.after.inv.kt")