pwielgolaski / shellcheck-plugin Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
I got a popup: "Internal error for --format. Please file a bug :("
I'm using the latest CLion EAP (#CL-191.6014.11, built on March 6, 2019) on macOS 10.14.2, and a latest shellcheck
that I built yesterday from source git/master.
In idea.log
, I only see one relevant line:
2019-03-06 10:16:53,755 [ 115872] INFO - llcheck.utils.ShellcheckRunner - Running command: /Users/me/bin/shellcheck --format=json /Users/me/bin/utils/merger
Thanks for developing this plugin!
Is there a build configuration available for easy building of it locally? Like a build.gradle
file?
Hello,
first of all - thank you for the kick off this project. ShellCheck is very useful tool and this plugin helps a lot - especially for beginners...
Whenever I open a new project, I get an error message window describing shellcheck path is not filled (through intellij idea event log).
Could you please check the code for storing the configuration path?
--
IDEA 2017.3, ShellCheck plugin 0.1
Hi, I'm using 0.1.4 on Pycharm 2019.2 and shellcheck 0.7.0
As is shown in this image, only the second one is marked as warning. The first one is not marked at first sight... no yellow line.
But If I set the mouse over the first one, it is shown as SC2886, look:
It could be nice to have all of them marked in yellow as warning. Otherwise is pretty hard to detect some of them. Thanks!
Hi, I'm using version 0.1.4 on Pycharm 2019.2 and shellcheck 0.7.0
It is marking some vars as they are not being used (SC2034) as shown below
That's not completely true. They are sued in other file added using source statement:
I'm using the correct shellcheck syntax in order to avoid the errors when I launch shellcheck from console with the -x
argument which makes the follow to sourced files.
Could be possible to add this shellcheck -x
feauture to the plugin in order to avoid this false positives?
Thanks so much and congratz for the plugin, is very handy!
Hello,
I have pycharm on ubuntu and installed shellcheck, but the shellcheck invalid configuration error message appears.
I tried configuring it according to the "fix configuration" option, but the request appears to be an ".exe". Does this plugin only work on Windows?
Thanks for integrating the fantastic tool into IDEA!
I get only 1 letter highlighted for warningns were SC2046 and SC2034.
This looked like shellcheck's API limitation, but apparently they already have endColumn
implemented: koalaman/shellcheck#1262
So far, a workaround for those without endColumn
would be to highlight a word if the warning position is a word start. I'm not asking to do syntax analysis for subshells in $()
.
I have a line like: echo $(function) is OK!
Accepting the "Quote to prevent word splitting" quickfix results in an error:
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
at com.intellij.openapi.util.TextRange.assertProperRange(TextRange.java:234)
at com.intellij.openapi.util.TextRange.assertProperRange(TextRange.java:229)
at com.intellij.openapi.util.TextRange.assertProperRange(TextRange.java:225)
at com.intellij.openapi.util.TextRange.<init>(TextRange.java:44)
at com.intellij.openapi.util.TextRange.<init>(TextRange.java:33)
at com.shellcheck.ShellcheckExternalAnnotator.createAnnotation(ShellcheckExternalAnnotator.java:134)
at com.shellcheck.ShellcheckExternalAnnotator.apply(ShellcheckExternalAnnotator.java:93)
at com.shellcheck.ShellcheckExternalAnnotator.apply(ShellcheckExternalAnnotator.java:29)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doApply(ExternalToolPass.java:206)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass.access$700(ExternalToolPass.java:41)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$null$0(ExternalToolPass.java:170)
at com.intellij.openapi.application.ReadAction.lambda$run$1(ReadAction.java:53)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:974)
at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:57)
at com.intellij.openapi.application.ReadAction.run(ReadAction.java:53)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$1(ExternalToolPass.java:167)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.lambda$runUnderDisposeAwareIndicator$10(BackgroundTaskUtil.java:243)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$3(CoreProgressManager.java:180)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:164)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:586)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:532)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:86)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:151)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:180)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:263)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:242)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.run(ExternalToolPass.java:165)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:336)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:326)
at com.intellij.util.ui.update.MergingUpdateQueue.lambda$flush$1(MergingUpdateQueue.java:276)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:290)
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:245)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:232)
at com.intellij.util.Alarm$Request.runSafely(Alarm.java:368)
at com.intellij.util.Alarm$Request.run(Alarm.java:355)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:224)
at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:220)
at com.intellij.util.concurrency.BoundedTaskExecutor.access$100(BoundedTaskExecutor.java:26)
at com.intellij.util.concurrency.BoundedTaskExecutor$2.lambda$run$0(BoundedTaskExecutor.java:198)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:224)
at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:194)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)```
Steps:
0) Launch IDEA and do not open projects.
cannot create configurable component
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'cwd' of com/shellcheck/utils/ShellcheckRunner.runVersion must not be null
at com.shellcheck.utils.ShellcheckRunner.$$$reportNull$$$0(ShellcheckRunner.java)
at com.shellcheck.utils.ShellcheckRunner.runVersion(ShellcheckRunner.java)
at com.shellcheck.settings.ShellcheckSettingsPage.updateVersion(ShellcheckSettingsPage.java:78)
at com.shellcheck.settings.ShellcheckSettingsPage.updateVersion(ShellcheckSettingsPage.java:72)
at com.shellcheck.settings.ShellcheckSettingsPage.createComponent(ShellcheckSettingsPage.java:111)
at com.intellij.openapi.options.ex.ConfigurableWrapper.createComponent(ConfigurableWrapper.java:163)
at com.intellij.openapi.options.ex.ConfigurableCardPanel.lambda$createConfigurableComponent$0(ConfigurableCardPanel.java:73)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:973)
at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:57)
at com.intellij.openapi.options.ex.ConfigurableCardPanel.createConfigurableComponent(ConfigurableCardPanel.java:69)
at com.intellij.openapi.options.ex.ConfigurableCardPanel.create(ConfigurableCardPanel.java:55)
at com.intellij.openapi.options.newEditor.ConfigurableEditor$1.create(ConfigurableEditor.java:57)
at com.intellij.openapi.options.newEditor.ConfigurableEditor$1.create(ConfigurableEditor.java:54)
at com.intellij.ui.CardLayoutPanel.createValue(CardLayoutPanel.java:88)
at com.intellij.ui.CardLayoutPanel.select(CardLayoutPanel.java:116)
at com.intellij.ui.CardLayoutPanel.lambda$null$0(CardLayoutPanel.java:132)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:315)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:719)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:668)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:363)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
at java.awt.Dialog.show(Dialog.java:1077)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:698)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:430)
at com.intellij.openapi.ui.DialogWrapper.invokeShow(DialogWrapper.java:1681)
at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1630)
at com.intellij.openapi.options.newEditor.SettingsDialog.lambda$show$0(SettingsDialog.java:70)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransactionAndWait(TransactionGuardImpl.java:153)
at com.intellij.openapi.options.newEditor.SettingsDialog.show(SettingsDialog.java:70)
at com.intellij.ide.actions.ShowSettingsUtilImpl.showSettingsDialog(ShowSettingsUtilImpl.java:84)
at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:54)
at com.intellij.ide.actions.ShowSettingsAction.actionPerformed(ShowSettingsAction.java:41)
at com.intellij.openapi.wm.impl.welcomeScreen.FlatWelcomeFrame$FlatWelcomeScreen$IconsFreeActionGroup$1.actionPerformed(FlatWelcomeFrame.java:776)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:258)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:275)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:249)
at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:200)
at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:190)
at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:184)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:195)
at com.intellij.ui.popup.AbstractPopup.lambda$dispose$12(AbstractPopup.java:1417)
at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:3048)
at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:172)
at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:124)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:179)
at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1413)
at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:160)
at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:308)
at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:279)
at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:48)
at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:44)
at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:138)
at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:107)
at com.intellij.openapi.util.objectTree.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:193)
at com.intellij.openapi.util.objectTree.ObjectNode.execute(ObjectNode.java:107)
at com.intellij.openapi.util.objectTree.ObjectTree.executeAll(ObjectTree.java:157)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:129)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:125)
at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:263)
at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:444)
at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:397)
at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:343)
at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.handleSelect(PopupFactoryImpl.java:299)
at com.intellij.ui.popup.list.ListPopupImpl$MyMouseListener.mouseReleased(ListPopupImpl.java:503)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6548)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
at com.intellij.ui.popup.list.ListPopupImpl$MyList.processMouseEvent(ListPopupImpl.java:557)
at java.awt.Component.processEvent(Component.java:6313)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4903)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4725)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4725)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:737)
at java.awt.EventQueue$4.run(EventQueue.java:735)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:719)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:664)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:363)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
@pwielgolaski
The commit 09fe47a has introduced a bug. The plugin crashes with an invalid annotation range:
Shellcheck version 0.6.0
IntelliJ Ultimate 2018.3.4
Mac OS 10.14.3
java.lang.Throwable: Invalid range specified: (1280, 1235);
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:134)
at com.intellij.openapi.util.TextRange.assertProperRange(TextRange.java:234)
at com.intellij.openapi.util.TextRange.assertProperRange(TextRange.java:229)
at com.intellij.openapi.util.TextRange.assertProperRange(TextRange.java:225)
at com.intellij.openapi.util.TextRange.<init>(TextRange.java:44)
at com.intellij.openapi.util.TextRange.<init>(TextRange.java:33)
at com.shellcheck.ShellcheckExternalAnnotator.createAnnotation(ShellcheckExternalAnnotator.java:134)
at com.shellcheck.ShellcheckExternalAnnotator.apply(ShellcheckExternalAnnotator.java:93)
at com.shellcheck.ShellcheckExternalAnnotator.apply(ShellcheckExternalAnnotator.java:29)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doApply(ExternalToolPass.java:198)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass.access$700(ExternalToolPass.java:40)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$null$0(ExternalToolPass.java:162)
at com.intellij.openapi.application.ReadAction.lambda$run$1(ReadAction.java:53)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:977)
at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:57)
at com.intellij.openapi.application.ReadAction.run(ReadAction.java:53)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$1(ExternalToolPass.java:159)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.lambda$runUnderDisposeAwareIndicator$10(BackgroundTaskUtil.java:244)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$3(CoreProgressManager.java:180)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:164)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:582)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:532)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:87)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:151)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:180)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:264)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:243)
at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.run(ExternalToolPass.java:157)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:336)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:326)
at com.intellij.util.ui.update.MergingUpdateQueue.lambda$flush$1(MergingUpdateQueue.java:276)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:290)
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:245)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:232)
at com.intellij.util.Alarm$Request.runSafely(Alarm.java:356)
at com.intellij.util.Alarm$Request.run(Alarm.java:343)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:228)
at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:227)
at com.intellij.util.concurrency.BoundedTaskExecutor.access$100(BoundedTaskExecutor.java:26)
at com.intellij.util.concurrency.BoundedTaskExecutor$2$1.run(BoundedTaskExecutor.java:200)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:229)
at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:194)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Shellcheck v0.1.3
PhpStorm 2018.3.4
Build #PS-183.5429.47, built on February 8, 2019
macOS 10.13.6
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.