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:
committed by
Andrey Breslav
parent
4ba423ee16
commit
98c54f39bb
@@ -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
|
||||
|
||||
+2
-2
@@ -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,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,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,4 +1,4 @@
|
||||
JetFile: Import.ktscript
|
||||
JetFile: Import.kts
|
||||
PACKAGE_DIRECTIVE
|
||||
<empty list>
|
||||
SCRIPT
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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();
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user