Giter VIP home page Giter VIP logo

shopware6-phpstorm-plugin's People

Contributors

actions-user avatar amenk avatar breaker92 avatar dependabot[bot] avatar fschmtt avatar melvinachterhuis avatar schrank avatar shyim avatar tinect avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shopware6-phpstorm-plugin's Issues

Create snippets in belonging file

Given i write a new file and fill it with non existing snippets, i want to have the possibility by an action to autogenerate an empty snippet in the belonging snippet file, so that i can fill it.

  • if a file does not exist, it can be generated (but i think it can be a "must" to have an existing snippet file with the main namespace)
  • nice to have: add snippet in all language snippet files too

Minor: Unnecessary edit prompt when trying to extend a vendor block

  1. Open for example vendor/shopware/storefront/Resources/views/storefront/page/product-detail/buy-widget.html.twig
  2. Press alt-enter on page_product_detail_buy_form_inner -> Extend this block
  3. Non-Project file protection kicks in - which seems not necessary, because I do not want to change the vendor file at all
    Non-Project file protection

v0.0.25

Community Store checks only for composer.jsons that are meant to be uploaded to the Community Store

I develop 99% projects. I don't fulfil composer.json compliance for community store release, but I don't have to. I just have to fill in the stuff that is needed for the admin. Please check where the composer.json is placed so I don't get annoyed for no reason. I would've PRd it but I don't know how to check the filepath where the warnings are registered. I would've checked whether I am in a custom/* folder beside plugins. Best would be to check for path repositories in the project composer.json. Whatever floats better this boat.

Generate Entity Definition

It would be handy if we could generate a new entity with the appropriate definition and collection.
The result should be the same as the result of ./bin/console frosh:make:definition My\\Plugin\\Namespace\\SomeDefinition

See: ./bin/console frosh:make:definition My\Plugin\Namespace\SomeDefinition

Add deprecation support for App Scripts

Function hooks will have a new function willBeRequiredInVersion. If this is set and a block cannot be found. The PhpStorm Extension should show a inspection and maybe a Quick Fix

Failed to build index - Toolbox Version 0.0.41

com.intellij.diagnostic.PluginException: Failed to build index 'de.shyim.shopware6.backend.system-config' for file file:///home/stefan/code/shop/src/MyBundle/Resources/config/config.xml (id = 3303) (file type = XML) [Plugin: de.shyim.shopware6]
	at com.intellij.diagnostic.PluginProblemReporterImpl.createPluginExceptionByClass(PluginProblemReporterImpl.java:23)
	at com.intellij.diagnostic.PluginException.createByClass(PluginException.java:89)
	...

Controller / Route generation

A standard controller and route generator would be a cool feature to have, which create a skeleton along with the annotations and registers it inside service.xml / routes.xml respectively.

snippet helper should show at least filename

image
It'll be very useful if the filename of the source would be shown, too.

So, someone can see which language it is (f.e. languages I don't really speak) and sees if the translations are mismatched 🙈

Exception during Twig file navigation: java.lang.NullPointerException at TwigBlockDeprecated

relavant stack:

at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.NullPointerException
	at de.shyim.shopware6.inspection.twig.TwigBlockDeprecated$buildVisitor$1.visitElement(TwigBlockDeprecated.kt:27)
	at com.intellij.psi.impl.PsiElementBase.accept(PsiElementBase.java:270)

java.lang.NullPointerException
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:564)
	at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:591)
	at java.base/java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:672)
	at com.intellij.concurrency.JobLauncherImpl.processQueue(JobLauncherImpl.java:367)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.processInOrder(InspectionRunner.java:324)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.visitElements(InspectionRunner.java:297)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$4(InspectionRunner.java:140)
	at com.intellij.codeInspection.InspectionEngine.withSession(InspectionEngine.java:246)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.inspect(InspectionRunner.java:126)
	at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.collectInformationWithProgress(LocalInspectionsPass.java:113)
	at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:80)
	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:55)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:406)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.runWithSpanIgnoreThrows(trace.kt:76)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceUtil.runWithSpanThrows(TraceUtil.java:34)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:401)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1075)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$3(PassExecutorService.java:392)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:609)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:391)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:367)
	at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:200)
	at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:184)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:365)
	at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:187)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.NullPointerException
	at de.shyim.shopware6.inspection.twig.TwigBlockDeprecated$buildVisitor$1.visitElement(TwigBlockDeprecated.kt:27)
	at com.intellij.psi.impl.PsiElementBase.accept(PsiElementBase.java:270)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$10(InspectionRunner.java:350)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1075)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$11(InspectionRunner.java:379)
	at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:200)
	at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:184)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$12(InspectionRunner.java:385)
	at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:158)
	at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:150)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$13(InspectionRunner.java:325)
	at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:129)
	at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:118)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$14(InspectionRunner.java:325)
	at com.intellij.concurrency.JobLauncherImpl$1MyProcessQueueTask.lambda$call$0(JobLauncherImpl.java:307)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:609)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
	at com.intellij.concurrency.JobLauncherImpl$1MyProcessQueueTask.call(JobLauncherImpl.java:292)
	at com.intellij.concurrency.JobLauncherImpl$1MyProcessQueueTask.call(JobLauncherImpl.java:278)
	at java.base/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1428)
	... 5 more

Fix error while writing new Criteria

java.util.NoSuchElementException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:603)
at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:678)
at java.base/java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:722)
at com.intellij.concurrency.JobLauncherImpl.processQueue(JobLauncherImpl.java:357)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.processInOrder(InspectionRunner.java:309)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.visitElements(InspectionRunner.java:284)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$5(InspectionRunner.java:122)
at com.intellij.codeInspection.InspectionEngine.withSession(InspectionEngine.java:227)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.inspect(InspectionRunner.java:110)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.collectInformationWithProgress(LocalInspectionsPass.java:132)
at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:97)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:56)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:419)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1152)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:412)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:411)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:387)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:174)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:213)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:385)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:184)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.util.NoSuchElementException: Array is empty.
at kotlin.collections.ArraysKt___ArraysKt.first(_Arrays.kt:1013)
at de.shyim.shopware6.inspection.php.CriteriaIdMisused$buildVisitor$1.visitElement(CriteriaIdMisused.kt:39)
at com.intellij.psi.impl.PsiElementBase.accept(PsiElementBase.java:273)
at com.jetbrains.php.lang.psi.elements.impl.PhpASTElementImpl.accept(PhpASTElementImpl.java:29)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$10(InspectionRunner.java:333)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1152)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$11(InspectionRunner.java:312)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:174)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:213)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$12(InspectionRunner.java:346)
at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:159)
at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:151)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$13(InspectionRunner.java:310)
at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:130)
at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:119)
at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processInOrder$14(InspectionRunner.java:310)
at com.intellij.concurrency.JobLauncherImpl$1MyProcessQueueTask.lambda$call$0(JobLauncherImpl.java:297)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
at com.intellij.concurrency.JobLauncherImpl$1MyProcessQueueTask.call(JobLauncherImpl.java:282)
at com.intellij.concurrency.JobLauncherImpl$1MyProcessQueueTask.call(JobLauncherImpl.java:270)
at java.base/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1448)
... 5 more

Error during indexing

Getting this error when the project is opened and starts indexing:

com.intellij.diagnostic.PluginException: Failed to build index 'de.shyim.shopware6.backend.system-config' for file file:///home/huzaifa/Code/sw6/custom/plugins/PickwareDhl/vendor/pickware/shipping-bundle/src/Resources/config/common.xml (id = 535179) (file type = XML) [Plugin: de.shyim.shopware6]
	at com.intellij.ide.plugins.PluginManagerCore.createPluginException(PluginManagerCore.java:274)
common.xml
<?xml version="1.0" encoding="UTF-8" ?>
<config
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/shopware/platform/master/src/Core/System/SystemConfig/Schema/config.xsd"
>
    <card>
        <title>Sender address</title>
        <title lang="de-DE">Absenderadresse</title>
        <input-field type="text">
            <name>senderAddressFirstName</name>
            <label>First name</label>
            <label lang="de-DE">Vorname</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressLastName</name>
            <label>Last name</label>
            <label lang="de-DE">Nachname</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressCompany</name>
            <label>Company</label>
            <label lang="de-DE">Firma</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressDepartment</name>
            <label>Department</label>
            <label lang="de-DE">Abteilung</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressPhone</name>
            <label>Phone</label>
            <label lang="de-DE">Telefonnummer</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressEmail</name>
            <label>Email address</label>
            <label lang="de-DE">E-Mail-Adresse</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressAddressAddition</name>
            <label>Address addition</label>
            <label lang="de-DE">Adresszusatz</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressStreet</name>
            <label>Street</label>
            <label lang="de-DE">Straße</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressHouseNumber</name>
            <label>House number</label>
            <label lang="de-DE">Hausnummer</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressZipCode</name>
            <label>Zip code</label>
            <label lang="de-DE">Postleitzahl</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressCity</name>
            <label>City</label>
            <label lang="de-DE">Ort</label>
            <required>false</required>
        </input-field>
        <input-field type="text">
            <name>senderAddressStateIso</name>
            <label>State (short code)</label>
            <label lang="de-DE">Bundesstaat/-land (Kürzel)</label>
            <required>false</required>
        </input-field>
        <input-field type="single-select">
            <name>senderAddressCountryIso</name>
            <label>Country</label>
            <label lang="de-DE">Land</label>
            <required>false</required>
            <options>
                <option>
                    <id>DE</id>
                    <name>Germany</name>
                    <name lang="de-DE">Germany</name>
                </option>
                <option>
                    <id>AT</id>
                    <name>Austria</name>
                    <name lang="de-DE">Österreich</name>
                </option>
                <option>
                    <id>BE</id>
                    <name>Belgium</name>
                    <name lang="de-DE">Belgien</name>
                </option>
                <option>
                    <id>DK</id>
                    <name>Denmark</name>
                    <name lang="de-DE">Dänemark</name>
                </option>
                <option>
                    <id>FI</id>
                    <name>Finland</name>
                    <name lang="de-DE">Finnland</name>
                </option>
                <option>
                    <id>FR</id>
                    <name>France</name>
                    <name lang="de-DE">Frankreich</name>
                </option>
                <option>
                    <id>IE</id>
                    <name>Ireland</name>
                    <name lang="de-DE">Irland</name>
                </option>
                <option>
                    <id>LU</id>
                    <name>Luxembourg</name>
                    <name lang="de-DE">Luxemburg</name>
                </option>
                <option>
                    <id>PL</id>
                    <name>Poland</name>
                    <name lang="de-DE">Polen</name>
                </option>
                <option>
                    <id>PT</id>
                    <name>Portugal</name>
                    <name lang="de-DE">Portugal</name>
                </option>
                <option>
                    <id>ES</id>
                    <name>Spain</name>
                    <name lang="de-DE">Spanien</name>
                </option>
            </options>
        </input-field>
    </card>
    <card>
        <title>Customs information for export (CN22 &amp; CN23)</title>
        <title lang="de-DE">Zollinformationen für Export</title>
        <input-field type="single-select">
            <name>customsInformationTypeOfShipment</name>
            <label>Type of shipment</label>
            <label lang="de-DE">Art der Sendung</label>
            <helpText lang="de-DE">
                Für Online-Shops wird "Handelsware" empfohlen. Entspricht Feld (10) auf der Zollinhaltserklärung CN 23.
            </helpText>
            <helpText>
                For online shops, "Sale of goods" is recommended. Corresponds to field (10) of the customs declaration
                CN 23.
            </helpText>
            <options>
                <option>
                    <id>gift</id>
                    <name>Gift</name>
                    <name lang="de-DE">Geschenk</name>
                </option>
                <option>
                    <id>documents</id>
                    <name>Documents</name>
                    <name lang="de-DE">Dokumente</name>
                </option>
                <option>
                    <id>commercial-sample</id>
                    <name>Commercial sample</name>
                    <name lang="de-DE">Warenmuster</name>
                </option>
                <option>
                    <id>sale-of-goods</id>
                    <name>Sale of goods</name>
                    <name lang="de-DE">Handelsware</name>
                </option>
                <option>
                    <id>returned-goods</id>
                    <name>Returned goods</name>
                    <name lang="de-DE">Warenrücksendung</name>
                </option>
                <option>
                    <id>other</id>
                    <name>Other</name>
                    <name lang="de-DE">Sonstiges</name>
                </option>
            </options>
        </input-field>
        <input-field type="text">
            <name>customsInformationExplanation</name>
            <label>Explanation of shipment (if type of shipment is "Other")</label>
            <label lang="de-DE">Beschreibung der Sendung (wenn Art der Sendung "Sonstiges" ist)</label>
            <helpText lang="de-DE">
                Muss angegeben werden, wenn die Art der Sendung "Sonstiges" ist. Entspricht Feld (10) auf der
                Zollinhaltserklärung CN 23. Muss in englischer oder französischer Sprache angegeben werden.
            </helpText>
            <helpText>
                Must be specified if the type of shipment is "Other". Corresponds to field (10) of the customs
                declaration CN 23. Must be provided in English or French.
            </helpText>
        </input-field>
        <input-field>
            <name>senderAddressCustomsReference</name>
            <label>Customs Reference</label>
            <label lang="de-DE">Kennnummer für Zollzwecke</label>
            <helpText>
                Whether the field must be filled in depends on the regulations of the country of origin and destination.
                Possible values are for example your importer code (customs/EORI number), tax code or VAT no.
            </helpText>
            <helpText lang="de-DE">
                Ob das Feld ausgefüllt werden muss, hängt von den Bestimmungen des Herkunfts- und Ziellandes ab.
                Mögliche Werte sind beispiele deine Zollnummer (EORI-Nummer), Steuernummer oder Umsatzsteuer-ID-Nr.
            </helpText>
        </input-field>
        <input-field type="text">
            <name>customsInformationOfficeOfOrigin</name>
            <label>Office of origin</label>
            <label lang="de-DE">Einlieferungsstelle</label>
            <helpText lang="de-DE">Name der Postfiliale, in die die Pakete eingeliefert werden.</helpText>
            <helpText>Name of the post office where the parcels are committed.</helpText>
        </input-field>
        <input-field type="text">
            <name>customsInformationComment</name>
            <label>Comment</label>
            <label lang="de-DE">Bemerkung</label>
            <helpText lang="de-DE">
                Gib hier an, wenn deine Waren bestimmten Bedingungen unterliegen, z.B. Quarantänebestimmungen,
                Gesundheitskontrollen, Bestimmungen für Pflanzenschutzmittel usw. Entspricht dem Feld (11) auf der
                Zollinhaltserklärung CN 23. Muss in englischer oder französischer Sprache angegeben werden.
            </helpText>
            <helpText>
                Specify here if your goods are subject to certain restrictions, e.g. quarantine regulations,
                health checks, provisions for plant protection products, etc. Corresponds to the field (11) on
                customs declaration CN 23. Must be provided in English or French.
            </helpText>
        </input-field>
        <input-field type="textarea">
            <name>customsInformationPermitNumbers</name>
            <label>Numbers of Permits or Licences</label>
            <label lang="de-DE">Nummern der Genehmigungen oder Lizenzen</label>
            <helpText lang="de-DE">
                Diese Angabe ist nur in Ausnahmefällen nötig und kann im Allgemeinen ignoriert werden.
                Entspricht dem Feld (12) auf der Zollinhaltserklärung CN 23.
            </helpText>
            <helpText>
                This specification is only necessary in exceptional cases and can usually be ignored. Corresponds to the
                field (12) on customs declaration CN 23.
            </helpText>
        </input-field>
        <input-field type="textarea">
            <name>customsInformationCertificateNumbers</name>
            <label>Numbers of certificates</label>
            <label lang="de-DE">Nummern der Bescheinigungen</label>
            <helpText lang="de-DE">
                Diese Angabe ist nur in Ausnahmefällen nötig und kann im Allgemeinen ignoriert werden.
                Entspricht dem Feld (13) auf der Zollinhaltserklärung CN 23.
            </helpText>
            <helpText>
                This specification is only necessary in exceptional cases and can usually be ignored. Corresponds to the
                field (13) on customs declaration CN 23.
            </helpText>
        </input-field>
    </card>
</config>

Autocomplete Vue Routes

  • SW6 does normalize the route names like sw-bla will be sw.bla
  • Add local inspection for invalid routes

New Copy / Paste action in context menu

Add 2 new entries to the context menu to copy snippets.

  • Copy as i18n js snippet
  • Copy as symfony/i18n .twig snippet (based on the folder)

image

Example

image
There is a difference between i18n and symfony i guess.

When it needs variables, it would be great to build the structure like:

Administration

Twig

{{ $tc('tooltip.invalidEmail', 0, {
    email: ''
}) }}

Js

this.$tc('tooltip.invalidEmail', 0, {
    email: ''
})

Storefront

Twig

{{ 'tooltip.invalidEmail'|trans({
    '%email%': ''
}) }}

Extend this block: Support for Admin Components

I tried extending a block vendor/shopware/administration/Resources/app/administration/src/app/component/structure/sw-search-bar/sw-search-bar.html.twig

Extends this block in other template directory

I get an error message:

Cannot determine view folder of currently opened file

There seems to be something special about that file as it is actually not in the view folder?

v0.0.25

Action Context Item: create Event Subscriber

Wenn ich ein Event subscriben will bin ich meistens in der Klasse oder an der Stelle wo das Event geworfen wird.

Geil wäre, wenn man da im Context Menu sagen könnte "Erstelle mir einen Event Subscriber dafür in folgendem Plugin" (oder evtl. folgendem Ordner). Das der automatisch dann die Datei anlegt und vorfüllt. (mit "getSubscribedEvents", richtigem Namespace und co) :D

Index build fails

com.intellij.diagnostic.PluginException: Failed to build index 'de.shyim.shopware6.backend.entity-definition' for file file:///home/mt/www/6.5/src/Core/Framework/App/Aggregate/AppShippingMethod/AppShippingMethodDefinition.php (id = 309726) (file type = PHP) [Plugin: de.shyim.shopware6]
	at com.intellij.diagnostic.PluginProblemReporterImpl.createPluginExceptionByClass(PluginProblemReporterImpl.java:23)
	at com.intellij.diagnostic.PluginException.createByClass(PluginException.java:89)
	at com.intellij.util.indexing.diagnostic.BrokenIndexingDiagnostics$DefaultListener.onFileIndexMappingFailed(BrokenIndexingDiagnostics.kt:47)
	at com.intellij.util.indexing.FileBasedIndexImpl.createSingleIndexValueApplier(FileBasedIndexImpl.java:1623)
	at com.intellij.util.indexing.FileBasedIndexImpl.lambda$doIndexFileContent$25(FileBasedIndexImpl.java:1483)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.freezeFileTypeTemporarilyWithProvidedValueIn(FileTypeManagerImpl.java:676)
	at com.intellij.util.indexing.FileBasedIndexImpl.doIndexFileContent(FileBasedIndexImpl.java:1435)
	at com.intellij.util.indexing.FileBasedIndexImpl.indexFileContent(FileBasedIndexImpl.java:1408)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.lambda$indexOneFileOfJob$4(IndexUpdateRunner.java:322)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor.callWrapped(NonBlockingReadActionImpl.java:832)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor$MonitoredComputation.call(NonBlockingReadActionImpl.java:864)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:602)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$attemptComputation$4(NonBlockingReadActionImpl.java:565)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1133)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:76)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtilService.runActionAndCancelBeforeWrite(ProgressIndicatorUtilService.java:63)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:133)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:114)
	at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:71)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:186)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:604)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:603)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173)
	at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:71)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:111)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:76)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.attemptComputation(NonBlockingReadActionImpl.java:565)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.executeSynchronously(NonBlockingReadActionImpl.java:492)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl.executeSynchronously(NonBlockingReadActionImpl.java:222)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.indexOneFileOfJob(IndexUpdateRunner.java:326)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.lambda$indexJobsFairly$3(IndexUpdateRunner.java:248)
	at com.intellij.openapi.progress.impl.ProgressSuspender.executeNonSuspendableSection(ProgressSuspender.java:89)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.indexJobsFairly(IndexUpdateRunner.java:251)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.lambda$doIndexFiles$2(IndexUpdateRunner.java:182)
	at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:24)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:249)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:31)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:227)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:215)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: com.intellij.util.indexing.impl.MapReduceIndexMappingException: com.intellij.openapi.project.IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReadyException documentation
	at com.intellij.util.indexing.impl.MapReduceIndex.mapInputAndPrepareUpdate(MapReduceIndex.java:255)
	at com.intellij.indexing.composite.CompositeInvertedIndexBase.updateBaseIndex(CompositeInvertedIndexBase.java:294)
	at com.intellij.indexing.composite.CompositeInvertedIndexBase.mapInputAndPrepareUpdate(CompositeInvertedIndexBase.java:64)
	at com.intellij.indexing.composite.CompositeInvertedIndexBase.mapInputAndPrepareUpdate(CompositeInvertedIndexBase.java:30)
	at com.intellij.util.indexing.FileBasedIndexImpl.createSingleIndexValueApplier(FileBasedIndexImpl.java:1614)
	... 46 more
Caused by: com.intellij.openapi.project.IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReadyException documentation
	at com.intellij.openapi.project.IndexNotReadyException.create(IndexNotReadyException.java:66)
	at com.intellij.util.indexing.FileBasedIndexImpl.handleDumbMode(FileBasedIndexImpl.java:859)
	at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:807)
	at com.intellij.psi.stubs.StubIndexEx.getContainingIds(StubIndexEx.java:369)
	at com.intellij.psi.stubs.StubIndexEx.processElements(StubIndexEx.java:170)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:102)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:90)
	at com.jetbrains.php.PhpIndexImpl.getElements(PhpIndexImpl.java:746)
	at com.jetbrains.php.PhpIndexImpl.getByName(PhpIndexImpl.java:1183)
	at com.jetbrains.php.PhpIndexImpl.getByFQN(PhpIndexImpl.java:1160)
	at com.jetbrains.php.PhpIndexImpl.getByFqnCacheAware(PhpIndexImpl.java:1241)
	at com.jetbrains.php.PhpIndexImpl.getClassesByFQNInternal(PhpIndexImpl.java:1236)
	at com.jetbrains.php.PhpIndexImpl.getClassesByFQN(PhpIndexImpl.java:1225)
	at com.jetbrains.php.PhpClassHierarchyUtils.getSuperClasses(PhpClassHierarchyUtils.java:615)
	at com.jetbrains.php.lang.psi.elements.impl.PhpClassImpl.findMethodInSuperClass(PhpClassImpl.java:1285)
	at com.jetbrains.php.lang.psi.elements.impl.PhpClassImpl.findMethodsByName(PhpClassImpl.java:1240)
	at com.jetbrains.php.lang.psi.elements.impl.PhpClassImpl.findMethodByName(PhpClassImpl.java:1179)
	at com.jetbrains.php.lang.psi.elements.impl.PhpClassImpl.findMethodByName(PhpClassImpl.java:1173)
	at de.shyim.shopware6.index.EntityDefinitionIndex$getIndexer$1$1.visitElement(EntityDefinitionIndex.kt:66)
	at com.intellij.psi.impl.PsiElementBase.accept(PsiElementBase.java:270)
	at com.jetbrains.php.lang.psi.elements.impl.PhpPsiElementImpl.accept(PhpPsiElementImpl.java:76)
	at com.intellij.psi.PsiWalkingState.visit(PsiWalkingState.java:53)
	at com.intellij.psi.PsiWalkingState.visit(PsiWalkingState.java:10)
	at com.intellij.util.WalkingState.walkChildren(WalkingState.java:65)
	at com.intellij.util.WalkingState.elementStarted(WalkingState.java:42)
	at com.intellij.psi.PsiWalkingState.elementStarted(PsiWalkingState.java:62)
	at com.intellij.psi.PsiRecursiveElementWalkingVisitor.visitElement(PsiRecursiveElementWalkingVisitor.java:48)
	at de.shyim.shopware6.index.EntityDefinitionIndex$getIndexer$1$1.visitElement(EntityDefinitionIndex.kt:82)
	at com.intellij.psi.impl.PsiElementBase.accept(PsiElementBase.java:270)
	at com.jetbrains.php.lang.psi.elements.impl.PhpASTElementImpl.accept(PhpASTElementImpl.java:29)
	at com.intellij.psi.impl.source.tree.SharedImplUtil.acceptChildren(SharedImplUtil.java:183)
	at com.intellij.psi.impl.source.PsiFileImpl.acceptChildren(PsiFileImpl.java:747)
	at de.shyim.shopware6.index.EntityDefinitionIndex.getIndexer$lambda$0(EntityDefinitionIndex.kt:36)
	at com.intellij.util.indexing.impl.MapReduceIndex.mapByIndexer(MapReduceIndex.java:313)
	at com.intellij.util.indexing.impl.MapReduceIndex.mapInput(MapReduceIndex.java:304)
	at com.intellij.util.indexing.impl.storage.VfsAwareMapReduceIndex.mapInput(VfsAwareMapReduceIndex.java:162)
	at com.intellij.util.indexing.impl.storage.VfsAwareMapReduceIndex.mapInput(VfsAwareMapReduceIndex.java:39)
	at com.intellij.util.indexing.impl.MapReduceIndex.mapInputAndPrepareUpdate(MapReduceIndex.java:249)
	... 50 more

not compatible with EAP 2023.3

java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/HashCodeBuilder
	at de.shyim.shopware6.index.dict.AdminModule.hashCode(AdminModule.kt:13)

NullPointerException when path `src/Resources/views/storefront` does not exist yet

I just started to build a new theme. I triggered the block context action "Extends this block in other template directory" and selected my theme. It throwed the attached error.

I could solve the problem by creating the /views/storefront path which didn't exist yet.

java.lang.NullPointerException
	at de.shyim.shopware6.intentions.ExtendTwigBlockIntention.createMissingViewFolder(ExtendTwigBlockIntention.kt:169)
	at de.shyim.shopware6.intentions.ExtendTwigBlockIntention.extendBlockInBundle(ExtendTwigBlockIntention.kt:114)
	at de.shyim.shopware6.intentions.ExtendTwigBlockIntention.invoke$lambda-5$lambda-4$lambda-3(ExtendTwigBlockIntention.kt:83)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:947)
	at de.shyim.shopware6.intentions.ExtendTwigBlockIntention.invoke$lambda-5$lambda-4(ExtendTwigBlockIntention.kt:82)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:219)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:174)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:164)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:150)
	at de.shyim.shopware6.intentions.ExtendTwigBlockIntention.invoke$lambda-5(ExtendTwigBlockIntention.kt:81)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
	at com.intellij.ui.popup.AbstractPopup.lambda$dispose$18(AbstractPopup.java:1508)
	at com.intellij.util.ui.EdtInvocationManager.invokeLaterIfNeeded(EdtInvocationManager.java:101)
	at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:186)
	at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:140)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:175)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:36)
	at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1505)
	at com.intellij.openapi.util.ObjectTree.runWithTrace(ObjectTree.java:139)
	at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:169)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:217)
	at com.intellij.ui.popup.AbstractPopup.cancel(AbstractPopup.java:782)
	at com.intellij.ui.popup.AbstractPopup.closeOk(AbstractPopup.java:716)
	at com.intellij.openapi.ui.popup.PopupChooserBuilder.closePopup(PopupChooserBuilder.java:470)
	at com.intellij.openapi.ui.popup.PopupChooserBuilder$1.mouseReleased(PopupChooserBuilder.java:329)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6654)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
	at java.desktop/java.awt.Component.processEvent(Component.java:6419)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2790)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:891)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:820)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:757)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:447)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:818)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:446)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:498)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

[Feature] Twig Block versioning

Problem

It's hard to keep Twig blocks up to date after Shopware update or plugin update, when the extended block has been changed. This is true for complete replacements/before and after changes.

So when developers update Shopware or a plugin, where they changed blocks, they manually check every block they overwritten if the content is still the same, or they check the styling of the page.

Both options are time-intensive:

Solution

A solution for this problem could be to add versioning to the Twig blocks

{% sw_extends '@Storefront/....' %}

{# shopware-block: <sha-hash-of-upstream-template>#<shopware-version-of-the-creation> #}
{% block component_fooo %}

{% endblock %}

This PhpStorm Plugin can read that comment and differentiate the generated hash from the current hash. The hash is generated from the original template. When you are on the same Shopware version, they match.
If not, we can highlight the block in yellow and say something changed in this block in the upstream template.

To simplify the lookup for changes, we can add an Intention (CMD/Control + Enter) to show a git diff between the previous and the current version of the block using the version added in the comment. So the user can directly see what has been changed.
After they made the changes, they can run a second Intention (CMD/Control + Enter) to update the hash to the newest version and go to the next block.

Migration

We can add a simple Intention to blocks to add the versioning if it's missing from the current value.

Configuration

We should add a config for opt-in for this feature for any theme/plugin/app. Some plugins are intentionally made for a lot of Shopware versions like Store Plugins, where this feature may not wanted.

Filter factory autocomplete / live template

The new filter factory introduced in 6.4 does not have good documentation for its usage so it gets quite difficult to know what values / options to fill in. An autocomplete / live template functionality would help a lot in defining custom filters in components.

Remove deprecation for 2021.3 Beta

IntelliJ IDEA Ultimate IU-213.5744.18Compatible. 1 usage of deprecated API
1 deprecated API usage
Shopware 6 Toolbox 0.0.19 uses deprecated API, which may be removed in future releases leading to binary and source code incompatibilities

Deprecated method usage (1)
AnAction.startInTransaction() (1)

Snippet check not working proper

Snippets in SW6 are loaded from Resources/snippet recursive and can be named individually.

But this plugin is just loading "storefront.en-GB.json". We are managing the snippets through messages.*.json, others will manage with a custom name, while docs of shopware is saying example for name.

Please support any json-file within Resources/snippet like shopware core.

sw-icon autocomplete

When using icons such as {% sw_icon 'bag' %} it would be great if an autocomplete can be provided to select the icon from available ones. For admin and storefront too if easily possible.

Show block usages for twig files (like interfaces in php)

It would be really nice if it were possible to have an icon, or some sort of option, on a twig block where other twig files either extend or rewrite it.
It would be nice if the file was shown as a suggestion.

So if i have a file

foo.html.twig

{% block test_block %}
some stuff
{% endblock %}

and a foo2.html.twig

{% sw_extends "foo.html.twig" %}

{% block test_block %}
other stuff
{{ parent() }}
{% endblock %}

it would be nice, if a user can jump to both files by an icon on the block, or via the context menu.

Create an app

A skeleton generator for apps with best practices - similar to the plugin generator.

Cannot create scheduled task

When creating scheduled tasks I get the following error

java.lang.NullPointerException: namespaces must not be null
at de.shyim.shopware6.action.generator.php.NewScheduledTaskAction.actionPerformed(NewScheduledTaskAction.kt:19)
at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:240)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:261)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:240)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:248)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:236)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:67)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:240)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:90)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:90)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:515)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:545)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6652)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
at java.desktop/java.awt.Component.processEvent(Component.java:6417)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5027)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2784)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4859)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:885)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:814)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:751)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:441)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:825)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:440)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:492)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

com.intellij.diagnostic.PluginException: Failed to build index (id = 4119) (file type = XML)

I am using the following version of

  • PhpStorm (latest):
    • PhpStorm 2023.3
    • Build #PS-233.11799.232, built on December 1, 2023
    • Runtime version: 17.0.9+7-b1087.7 amd64
    • VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
  • Shopware 6 Toolbox (latest):
    • 0.0.41

After the Plugin is installed and the index in PhpStorm is rebuild, the following error is thrown

com.intellij.diagnostic.PluginException: Failed to build index 'de.shyim.shopware6.backend.system-config' for file file://D:/OneDriveBusiness/OneDrive - XXXXX/Code/XXXXXX/general/sw6_dev/custom/plugins/PickwareGls/vendor/pickware/shipping-bundle/src/Resources/config/common.xml (id = 4119) (file type = XML) [Plugin: de.shyim.shopware6]
	at com.intellij.diagnostic.PluginProblemReporterImpl.createPluginExceptionByClass(PluginProblemReporterImpl.java:23)
	at com.intellij.diagnostic.PluginException.createByClass(PluginException.java:89)
	at com.intellij.util.indexing.diagnostic.BrokenIndexingDiagnostics$DefaultListener.onFileIndexMappingFailed(BrokenIndexingDiagnostics.kt:47)
	at com.intellij.util.indexing.FileBasedIndexImpl.createSingleIndexValueApplier(FileBasedIndexImpl.java:1575)
	at com.intellij.util.indexing.FileBasedIndexImpl.lambda$doIndexFileContent$23(FileBasedIndexImpl.java:1444)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.freezeFileTypeTemporarilyWithProvidedValueIn(FileTypeManagerImpl.java:678)
	at com.intellij.util.indexing.FileBasedIndexImpl.doIndexFileContent(FileBasedIndexImpl.java:1397)
	at com.intellij.util.indexing.FileBasedIndexImpl.indexFileContent(FileBasedIndexImpl.java:1371)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.lambda$indexOneFileOfJob$5(IndexUpdateRunner.java:492)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor.callWrapped(NonBlockingReadActionImpl.java:840)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor$MonitoredComputation.call(NonBlockingReadActionImpl.java:872)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:604)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$attemptComputation$4(NonBlockingReadActionImpl.java:567)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1075)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtilService.runActionAndCancelBeforeWrite(ProgressIndicatorUtilService.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:128)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:111)
	at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:73)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:192)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:609)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:179)
	at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:108)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:73)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.attemptComputation(NonBlockingReadActionImpl.java:567)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.executeSynchronously(NonBlockingReadActionImpl.java:492)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl.executeSynchronously(NonBlockingReadActionImpl.java:220)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.indexOneFileOfJob(IndexUpdateRunner.java:496)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.lambda$indexJobsFairly$4(IndexUpdateRunner.java:375)
	at com.intellij.openapi.progress.impl.ProgressSuspender.executeNonSuspendableSection(ProgressSuspender.java:90)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.indexJobsFairly(IndexUpdateRunner.java:378)
	at com.intellij.util.indexing.contentQueue.IndexUpdateRunner.lambda$doIndexFiles$3(IndexUpdateRunner.java:309)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:244)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:30)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:222)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:210)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: com.intellij.util.indexing.impl.MapReduceIndexMappingException: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
	at com.intellij.util.indexing.impl.MapReduceIndex.mapInputAndPrepareUpdate(MapReduceIndex.java:260)
	at com.intellij.indexing.composite.CompositeInvertedIndexBase.updateBaseIndex(CompositeInvertedIndexBase.java:284)
	at com.intellij.indexing.composite.CompositeInvertedIndexBase.mapInputAndPrepareUpdate(CompositeInvertedIndexBase.java:64)
	at com.intellij.indexing.composite.CompositeInvertedIndexBase.mapInputAndPrepareUpdate(CompositeInvertedIndexBase.java:30)
	at com.intellij.util.indexing.FileBasedIndexImpl.createSingleIndexValueApplier(FileBasedIndexImpl.java:1571)
	... 45 more
Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
	at java.base/java.util.Collections$SingletonList.get(Collections.java:4959)
	at de.shyim.shopware6.index.SystemConfigIndex.getNamespaceFromInput(SystemConfigIndex.kt:103)
	at de.shyim.shopware6.index.SystemConfigIndex.getIndexer$lambda$0(SystemConfigIndex.kt:37)
	at com.intellij.util.indexing.impl.MapReduceIndex.mapByIndexer(MapReduceIndex.java:318)
	at com.intellij.util.indexing.impl.MapReduceIndex.mapInput(MapReduceIndex.java:309)
	at com.intellij.util.indexing.impl.MapReduceIndex.mapInputAndPrepareUpdate(MapReduceIndex.java:254)
	... 49 more

Wrong name for generated cms element component

Wrong name for generated cms element component

The name of the generated cms element component is missing -component in the name prefix.

Name is currently sw-cms-el-${NAME} instead of sw-cms-el-component-${NAME}, which is already reference in the cms index.js.

PR follows

Extrend this block with Shopware 6.4.11.1 and a fresh theme-skeleton?

I just used the "Extend this block" functionality in my shopware 6.4.11.1 instance and with a fresh theme-skeleton. I was very confused why my changes within the Theme didn't get used by shopware.

I just found out that this function creates a folder within "ThemePluginRoot/Resources/views/" , but shopware recognizes templates only in "ThemePluginRoot/src/Resources/views/" directory.

The problem does not appear anymore, once the "views" directory exists inside the template.

Automatically tag plugin src folder as sources root with correct namespace

Currently, marking a custom/static-plugins/VendorPlugin/src directory as Sources in PHPStorm is a very long process. It would be great if this plugin could do that automatically.

Current workflow:

  1. Open settings
  2. Go to Directories
  3. Find src folder of your new plugin
  4. Mark as Sources
  5. Click the small pencil icon next to your path in the right sidebar
  6. Manually fill in the namespace prefix of your plugin

I'm not sure what is possible (or if other plugins maybe already exist), but doing this automatically based on the composer.json PSR-4 entry would be so awesome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.