de-jcup / eclipse-bash-editor Goto Github PK
View Code? Open in Web Editor NEWBash editor plugin for eclipse
Home Page: https://marketplace.eclipse.org/content/bash-editor
License: Apache License 2.0
Bash editor plugin for eclipse
Home Page: https://marketplace.eclipse.org/content/bash-editor
License: Apache License 2.0
Create an integrated eclipse help for the bash editor
: ${NAWK:=${awk:=awk}}
Fatal () { Msg "$@"; exit 1; }
results in errors - but there is none
cd egradle-plugin-branding
the -plugin-branding is accidently recognized as an parameter.
Detection must be changed to handle only - after whitespaces
Describe:
As mentioned in https://unix.stackexchange.com/questions/73750/difference-between-function-foo-and-foo
Shell functions are declared as follows:
name () compound-command [redirection]
function name [()] compound-command [redirection]
This defines a function named name. The reserved word function is optional. If the function reserved word is supplied, the parentheses are optional.
Also at a look at http://www.shelldorado.com/
(e.g. http://www.shelldorado.com/scripts/quickies/newsweekly.txt)
many people do not use the (optional) function keyword .
So "normal" method must be supported too.
Integrate as BashError inside BashScriptModelBuilder + Testcases
the follwoing function is not correctly displayed in Outline view:
function read-file {
}
is displayed as:
function read
Integrate as BashError inside BashScriptModelBuilder + Testcases
alpha() {
eval "a"=${_e#*=}
}
brings up an error in editor
There shall be a simple code completion for existing words in document.
E.g.:
"ensure you are saving the environment"
type "e" will show up "ensure|environement" as proposals.
Syntax coloring in blue starts at every single quote, even if it's a ' (in my case an apostrophe in echo command).
Bash has some special characters which are explained at http://tldp.org/LDP/abs/html/special-chars.html
So there is not only $$ which was integrated with #47 but also other special parts
For example:
$? represents a variable for the exit code
So such special variables have to be integrated and checked in tokenparser and the ParseState.VARIABLE must be termined then to prevent wrong error detections!
for the following function:
function read-host-settings {
}
is displayed as
function read-host-settings {
}
note that the read word is in bold
org.eclipse.core.runtime.AssertionFailedException: assertion failed:
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at org.eclipse.jface.text.Position.<init>(Position.java:62)
at org.eclipse.jface.text.TypedPosition.<init>(TypedPosition.java:35)
at org.eclipse.jface.text.rules.FastPartitioner.initialize(FastPartitioner.java:169)
at org.eclipse.jface.text.rules.FastPartitioner.checkInitialization(FastPartitioner.java:148)
at org.eclipse.jface.text.rules.FastPartitioner.connect(FastPartitioner.java:140)
at org.eclipse.jface.text.rules.FastPartitioner.connect(FastPartitioner.java:121)
at de.jcup.basheditor.document.BashFileDocumentProvider.createDocument(BashFileDocumentProvider.java:37)
at org.eclipse.ui.editors.text.FileDocumentProvider.createElementInfo(FileDocumentProvider.java:721)
at org.eclipse.ui.texteditor.AbstractDocumentProvider.connect(AbstractDocumentProvider.java:392)
at org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextEditor.java:4178)
at org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEditor.java:229)
at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.doSetInput(AbstractDecoratedTextEditor.java:1466)
at org.eclipse.ui.editors.text.TextEditor.doSetInput(TextEditor.java:150)
at de.jcup.basheditor.BashEditor.doSetInput(BashEditor.java:229)
at org.eclipse.ui.texteditor.AbstractTextEditor$5.run(AbstractTextEditor.java:3154)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:437)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:353)
at org.eclipse.ui.internal.WorkbenchWindow$14.run(WorkbenchWindow.java:2184)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2180)
at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3172)
at org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3197)
at de.jcup.basheditor.BashEditor.init(BashEditor.java:251)
at org.eclipse.ui.internal.EditorReference.initialize(EditorReference.java:362)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:318)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:966)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:931)
at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:151)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:375)
at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:294)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:975)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:651)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:757)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:728)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:722)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:706)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$1.handleEvent(PartServiceImpl.java:104)
at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:233)
at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
at org.eclipse.swt.widgets.Display.syncExec(Display.java:5414)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:211)
at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:201)
at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:94)
at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:60)
at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:173)
at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:617)
at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:581)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:770)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:401)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1214)
at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3261)
at org.eclipse.ui.internal.WorkbenchPage.access$25(WorkbenchPage.java:3176)
at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:3158)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3153)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3117)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3107)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:563)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:518)
at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:360)
at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:167)
at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:256)
at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:221)
at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:271)
at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:249)
at org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionGroup.handleOpen(PackageExplorerActionGroup.java:379)
at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$4.open(PackageExplorerPart.java:540)
at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:46)
at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:855)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173)
at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:852)
at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1169)
at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:278)
at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:272)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:313)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5227)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1340)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4561)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4151)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
As mentioned in
http://tldp.org/LDP/abs/html/string-manipulation.html
you can use curly braces for string operations with variables. This is currently not supported
Example:
sed 's/@DBNAME@/'"$DATABASE_NAME"'/g' > ${PID}_create_database.sql
The ${PID} should be highlighted as variable but only $ is currently in dedicated color.
When the last line is not empty "if" and other statements are not colored
As mentioned in #41 the bracket switch support does not correctly show up in following case:
Hi There!
And thanks for the 0.9.0 version! this Helps!
here is a problem I noticed with this new version:
the following code makes the bash editor reporting a syntax error: "It seems this opening bracket is missing a closing one."
declare -A TitleMap
if [ ${#TitleMap[*]} -eq 0 ]
then
displayerr "Map is empty"
exit 1
fi
My Guess is that the pound sign is taken as a comment and therefore the closing '}' is considered as missing
the exat same problem in the following code: (this code seems surprising but the syntax is perfectly correct. the same error is reported:
function array-to-string {
local _e="$( declare -p ${1} )"
eval "local -A _params"=${_e#*=}
local key
local separator
for key in ${!_params[@]}
do
echo -n "$separator$key=${_params[$key]}"
separator=" "
done
}
Add following bash commands:
`org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.Error: Unresolved compilation problems:
The import de.jcup.basheditor.scriptmodel cannot be resolved
The import de.jcup.basheditor.scriptmodel cannot be resolved
The import de.jcup.basheditor.scriptmodel cannot be resolved
Item cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
BashScriptModel cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
BashScriptModel cannot be resolved to a type
Item cannot be resolved to a type
BashFunction cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
ItemType cannot be resolved to a variable
Item cannot be resolved to a type
)
at org.eclipse.swt.SWT.error(SWT.java:4533)
at org.eclipse.swt.SWT.error(SWT.java:4448)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4213)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3820)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1044)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
at org.eclipse.equinox.launcher.Main.main(Main.java:1472)
Caused by: java.lang.Error: Unresolved compilation problems:
The import de.jcup.basheditor.scriptmodel cannot be resolved
The import de.jcup.basheditor.scriptmodel cannot be resolved
The import de.jcup.basheditor.scriptmodel cannot be resolved
Item cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
BashScriptModel cannot be resolved to a type
BashScriptModelBuilder cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
BashScriptModel cannot be resolved to a type
Item cannot be resolved to a type
BashFunction cannot be resolved to a type
Item cannot be resolved to a type
Item cannot be resolved to a type
ItemType cannot be resolved to a variable
Item cannot be resolved to a type
at de.jcup.basheditor.outline.BashEditorTreeContentProvider.<init>(BashEditorTreeContentProvider.java:24)
at de.jcup.basheditor.outline.BashEditorContentOutlinePage.<init>(BashEditorContentOutlinePage.java:39)
at de.jcup.basheditor.BashEditor.getOutlinePage(BashEditor.java:108)
at de.jcup.basheditor.BashEditor$2.run(BashEditor.java:256)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
... 24 more`
Hi!
With the following code (which is correct), an error is reported on the last line by the bash editor:
the code:
#!/bin/bash
declare -A hostSettings
function display-installation {
IStatus=${hostSettings[InstallStatus]}
CStatus=${hostSettings[ConfigStatus]}
#display parameters
package_Idx=${PackageIdxMap[`basename $package`]}
display-param-from-file $package/var/${InputFileMap[$package_Idx]} "$context:$host"
}
function display-param-from-file {
}
By the way if you set the cursor just after the braket (end of the line) at line 5, the closing braket highlighted by the editor is the closing braket at line 7.... it should be the one at the end of the function
Best regards
Jean-marie
After #9 is done a simple outline view shall be integrated
It should show at least functions in bash, maybe also variables.
cd "$(dirname "$BASH_SOURCE")"
# Check if the database exists
does result in an error that the "if" does not have a "fi"...
It seems the comment state is not recognized
Documentation necessary:
Deployment itself
The script model builder does build BashError instances on problems when creating outline view.
So this information shall be used to show errors in editor etc. Currently only unclosed functions are recognized, but basherrors (and maybe warnings in future) will be extended.
the following code:
#
# this function displays...
function display {
}
leads to wrong display in the eclipse Outline view. two entries are displayed:
function displays
function display
the first one corresponds to the one detected in the comment section
Currently validation is done manually and not in eclipse way-
Wanted:
; is possible as a delimiter before function
So
;function xyz {
}
is possible. But this is not recognized in Outline view. Must be fixed.
see http://tldp.org/LDP/abs/html/special-chars.html
Command separator [semicolon]. Permits putting two or more commands on the same line.
Deploy to bintray + eclipse marketplace etc.
if isWindows ; then
export DB2CLP=**$$**
fi
# Simple function to output to STDERR
is correct but comment is not recognized as comment any longer so the "function to" is recognized as function which is not correct...
With #8 an eclipse help was integrated - but is currently missing at installed plugins.
Maybe just the html output folder must be added to runtime...
Integrate as BashError inside BashScriptModelBuilder + Testcases
Integrate a bash parser - maybe antlr ...
Something like
xyz -abc
xyz --list-files --bla
should be always handled like a command with parameters and e.g. "-abc" or "--list-files" should have a dedicated and customizable color etc. (but not inside strings)
e.g. a
function show_help_and_exit (){
...
}
will be rendered as help and exit command...
integrate quick outline like in egradle editor
In this piece of code, the second if statament is not coloured
if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then
DIST=$(grep "DISTRIB_ID" /etc/lsb-release|awk -F"=" '{print $2}'|tr -d "\"', \n")
if [ -z "$DIST" ]; then
DIST="Ubuntu"
fi
fi
(original bug information came from https://marketplace.eclipse.org/comment/4750#comment-4750)
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.