Code Monkey home page Code Monkey logo

vscode_erlang's Introduction

Erlang for Visual Studio Code

Visual Studio Marketplace Installs Build Status License

This extension adds support for the Erlang language to Visual Studio Code, including editing, building and debugging.

Editing support

  • Syntax highlighting
  • Automatic indentation
  • Erlang IntelliSense
  • Shows errors and warnings dynamically while you type
  • Go To Definition/Peek Definition
  • Hover help for standard functions
  • Hover for project functions showing head clauses
  • CodeLens showing exported functions and references
  • InlayHints showing parameters name in function calls
    • disable by default : enable in configuration settings
    • limits : only works with locals calls

editing

InlayHints in function calls

inlayHints

  • showing parameter name when it doesn't match with caller var name

Build

build

  • Standard rebar3 is the default build tool, also rebar is supported. The rebar.config file should be placed in the root directory.
  • Build arguments are configurable, by default "compile" is used
  • You can override the default in configuration file (i.e. workspace settings)

build

Debugger

  • Variables List shows variables from the current scope
  • Call Stack shows Erlang processes and allows to control them with e.g. Pause and Continue
  • Standard commands Step Over, Step Into, Step Out supported
  • Full breakpoints support:
    • Regular breakpoints
    • Function Breakpoints: use format module:function/arity
    • Conditional Breakpoints
    • Hit-Count Breakpoints

debug-inlinevalues

Running debugger

You can provide a specific command line to 'erl' in launch.json configuration file in "arguments" entry.

debug1

The modified code may be automatically build before debugger is started. To set automatic build up you need to:

  1. Add to launch.json file the entry "preLaunchTask": "rebar3 compile"
  2. Select Configure Task in the alert, choose Create tasks.json file from template and then Others: Example to run an arbitrary command
  3. This will create tasks.json for you. Change both label and command to "rebar3 compile".
  4. Add entry "problemMatcher": "$erlang"

debug

Then, before debugging is started, modified files will be recompiled automatically.

Using this extension in Erlang Docker instance

Clone this repo, and try it :

For more information about vscode and containers :

Available commands

Support for Erlang tools, including rebar3, EUnit and Dialyzer

commands

  • Dialyzer warnings displayed in Problems tab for easy navigation

Settings

  • erlang.erlangPath - Directory location of erl/escript
  • erlang.erlangArgs - Arguments passed to Erlang backend
  • erlang.erlangDistributedNode - Start the Erlang backend in a distributed Erlang node for extension development
  • erlang.rebarPath - Directory location of rebar/rebar3
  • erlang.rebarBuildArgs - Arguments to provide to rebar/rebar3 build command
  • erlang.includePaths - Include paths are read from rebar.config, and also standard set of paths is used. This setting is for special cases when the default behaviour is not enough
  • erlang.linting - Enable/disable dynamic validation of opened Erlang source files
  • erlang.codeLensEnabled - Enable/Disable CodeLens
  • erlang.inlayHintsEnabled - Enable/Disable InlayHints
  • erlang.verbose - Activate technical traces for use in the extension development

Help

Some configuration tricks

Credits

File 'Erlang.tmLanguage' is inspired from https://github.com/textmate/erlang.tmbundle/blob/master/Syntaxes/Erlang.plist

vscode_erlang's People

Contributors

aliics avatar andrewsumskoy avatar chi-lambda avatar danielfinke avatar dependabot[bot] avatar dziaineka avatar eboutin avatar filmor avatar hkthienym avatar hypro999 avatar jparise avatar kornelh avatar nigelrook avatar pgourlain avatar pierrick-btl avatar saleyn avatar sebkm avatar shian avatar shuying2244 avatar vladdu avatar williamthome avatar wojteksurowka avatar yozhig avatar zsoci 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  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

vscode_erlang's Issues

build as task

The "rebar compile" operation run as a task, so that ulterior changes are detected and files are recompiled automatically, just like for JS, for example.

consistent casing for file names

The ts file names should have consistent casing: either all lowercase (which seems to be what most node.js modules use) or all CamelCased. I'd prefer lowercased (with _ as word separator).

include_lib not handled correctly

Thanks for a very useful extension!

I noticed that if eunit is included with

-include_lib("eunit/include/eunit.hrl").

there are warnings about unused functions ending in _test. The eunit module exports all functions with arity 0 with names ending in _test.

The file is located in /usr/lib/erlang/lib/eunit-2.3.5/include/eunit.hrl, so adding the path /usr/lib/erlang/lib/eunit-2.3.5/include/ to erlang.includePaths works, but -include-lib makes it more convenient by scanning system paths and handling version numbers.

Changelog doesn't appear in the correct place when browsing the extension

I'm not sure why your changes don't appear in the "Changelog" section in VSCode since CHANGELOG.md is at the root of the project where it should be, but it seems something is not quite right. I almost missed the changes because right now they end up at the end of the "Details" section when you browse the extension. Nothing appears in the "Changelog" section.

Error when trying to debug

{badarg,[{erlang,list_to_binary,[ok],[]},{vscode_connection,loop_handle_command,1,[{file,"c:/Users/Shamis/.vscode/extensions/pgourlain.erlang-0.1.0/apps/erlangbridge/src/vscode_connection.erl"},{line,58}]}]}

trying to do a list_to_binary of ok
This happens when adding a breakpoint and removing it. This is seen on a windows os

Go to declaration not working

I have my keybindings as such:

{ "key": "cmd+b", "command": "editor.action.goToDeclaration" }

Nothing happens when I cmd+b on a fun or module.

locate external tools

The code assumes that there is a rebar script in the workspace root; that escript.exe is available in %PATH%; that "erl" is available on path. There should be a way to configure the locations (maybe a project needs a specific version of Erlang, for example).

Failed to save "test.erl". The content on disk is newer.

Hi

When I have this extension loaded after a small number of successful saves (2-3) I receive the following error message:
Failed to save 'filename.erl': The content on disk is newer. Please compare your version with the one on disk.

Once this error appears it will reappear for subsequent saves.

This occurs on my windows 10 and ubuntu dev environments.
VS: 1.24.0
erlang 0.4.4

Cheers

Aidan

Erlang language server node is never stopped

Hi,

First of all, thanks for making this plugin!

I've noticed a problem...

Every time I open an Erlang project, a new Erlang node is spawned These nodes are never stopped. For example, after opening and closing the same project three times, I see:

 ps aux | grep beam
radu     18270  0.2  0.0 4109356 26696 ?       Sl   16:37   0:00 /usr/lib/erlang/erts-9.3/bin/beam.smp -- -root /usr/lib/erlang -progname erl -- -home /home/radu -- -kernel shell_history enabled -noshell -pa src -pa ebin -s int -vscode_port 35683 -s vscode_lsp_entry start 35683
radu     18912  1.4  0.0 4106028 26864 ?       Sl   16:39   0:00 /usr/lib/erlang/erts-9.3/bin/beam.smp -- -root /usr/lib/erlang -progname erl -- -home /home/radu -- -kernel shell_history enabled -noshell -pa src -pa ebin -s int -vscode_port 34532 -s vscode_lsp_entry start 34532
radu     19203 13.6  0.0 4117420 31760 ?       Sl   16:39   0:00 /usr/lib/erlang/erts-9.3/bin/beam.smp -- -root /usr/lib/erlang -progname erl -- -home /home/radu -- -kernel shell_history enabled -noshell -pa src -pa ebin -s int -vscode_port 42898 -s vscode_lsp_entry start 42898

The Erlang process persists both when I close the editor completely or when I use "Close Folder" in VSCode.

I've noticed this on a Linux workstation, but I can also check on a Macbook, to see if it happens.

project structure

Hi

I has a project that file structure is like below.
It split different services into different applications. Each application has its rebar.config.
But current vscode_erlang only read rebar.config in top folder.
Does vscode_erlang support file structure like this ?

    $PROJECT_ROOT
     |
     -- rebar.config
     -- apps/            % Contains all applications which are
          |              % part of the system.
          |   
          | -- some_app/
          |         |
          |         -- rebar.config
          | -- another_app/
                     |
                     -- rebar.config

Syntax Highlighting not working

Issue Type: Bug

Syntax Highlighting does not work.
I have tried changing the themes and uninstalling and reloading erlang extensions. I cant seem to get it to work

Extension version: 0.4.6
VS Code version: Code 1.28.2 (7f3ce96ff4729c91352ae6def877e59c561f4850, 2018-10-17T00:23:51.859Z)
OS version: Windows_NT x64 10.0.17134

System Info
Item Value
CPUs Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz (4 x 2592)
GPU Status 2d_canvas: enabled
checker_imaging: disabled_off
flash_3d: enabled
flash_stage3d: enabled
flash_stage3d_baseline: enabled
gpu_compositing: enabled
multiple_raster_threads: enabled_on
native_gpu_memory_buffers: disabled_software
rasterization: enabled
video_decode: enabled
video_encode: enabled
webgl: enabled
webgl2: enabled
Memory (System) 7.87GB (1.98GB free)
Process Argv
Screen Reader no
VM 0%

Connection to server is erroring. Shutting down server.

config

    "erlang.erlangPath": "C:\\Program Files\\erl9.2\\bin",
    "erlang.codeLensEnabled": true,
    "erlang.linting": true,
    "erlang.verbose": true

log

starting : erlc 
-o ../ebin vscode_lsp_entry.erl
erlc exit code:0
erlc exit code:0
starting : erl 
-noshell -pa src -pa ebin -s int -vscode_port 61072 -s vscode_lsp_entry start 61072 
Old inliner: threshold=0 functions=[{hex,1}]
Old inliner: threshold=0 functions=[{object_key,2}]
[Error - 18:26:30] Server initialization failed.
  Message: Handler error
  Code: -32001 

=ERROR REPORT==== 15-Jun-2018::18:26:30 ===
LSP handler error error:badarg
[Error - 18:26:30] Connection to server is erroring. Shutting down server.
[Error - 18:26:30] Connection to server is erroring. Shutting down server.
erl exit code:0
erl exit code:0

i don't see what i can tune to make it work, any help would be appreciated.

Thanks

Support go to defiinition for Macro

Hello,

Firstly thanks for this project, appreciate the time and effort that go in this.

I'm requesting a feature go to definition for macros.

I have no prior experience with language servers or vscode lang extensions, but I can try to chip in if someone can help me with this.

Analyzing of code in ifdef?

I add eunit tests to the same file like:

-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").

%% tests here
-endif.

However, this extension does not appear to analyze code inside these blocks. Is there a way to enable that?

consistent gen_server call timeouts

When I enable verbose, I consistently see gen_server timeouts in the log like so:

using erlang binaries from path : 'C:/Program Files/erl10.0/bin/'
starting : erlc 
-o ../ebin vscode_lsp_entry.erl
erlc exit code:0
using erlang binaries from path : 'C:/Program Files/erl10.0/bin/'
starting : erl 
-noshell -pa src -pa ebin -s int -vscode_port 49983 -s vscode_lsp_entry start 49983 
erlc exit code:0
Old inliner: threshold=0 functions=[{hex,1}]
Old inliner: threshold=0 functions=[{object_key,2}]
=ERROR REPORT==== 29-Jun-2018::11:39:59.617000 ===
LSP handler error exit:{timeout,
                        {gen_server,call,
                         [gen_lsp_doc_server,
                          {set_document_attribute,

I see one erl.exe in task manager, that exits if I close vs code.

Other symptoms I see is that

  • Almost always, it fails to lint the file (errors are not highlighted)
  • When it does lint, it systematically fails to find my include files, no matter what I put in erlang.includePaths

I've tried different erlang versions, disabling firewall, rebooting, nothing seems to make a difference. As it is now, the plugin is nothing but a glorified syntax highlighter.

Valid include_lib call appears as an error

Hi Pierrick,

Thanks for your great work on this extension. New error highlighting looks really great.

I have a small problem with including a library.
screenshot from 2018-03-05 15-32-46
This module can be compiled but it looks like an error. Every reference to a record from this library also appears as an error.

I ran rebar3 dialyzer and it didn't output any warnings for these lines. Do you have any idea what could be the cause? Let me know if you need more information.

Kind regards

epp error at textDocument/didChange

Hi

It show error like below when doing textDocument/didChange and lint is fail.
I check with epp module and found it is not support filename in binary format.
Not sure it is only on OTP 18 or all OTP version

=ERROR REPORT==== 30-May-2018::11:20:00 ===
Error in process <0.179.0> with exit value:
{function_clause,[{epp,file_name,
                       [<<"/var/folders/r5/83q89mpj43g_6164x53ssyy00000gn/T/20U5JPSTVVXBQ">>],
                       [{file,"epp.erl"},{line,698}]},
                  {epp,enter_file_reply,5,[{file,"epp.erl"},{line,691}]},
                  {epp,init_server,4,[{file,"epp.erl"},{line,552}]}]}

=ERROR REPORT==== 30-May-2018::11:20:00 ===
LSP handler error exit:{function_clause,
                           [{epp,file_name,
                                [<<"/var/folders/r5/83q89mpj43g_6164x53ssyy00000gn/T/20U5JPSTVVXBQ">>],
                                [{file,"epp.erl"},{line,698}]},
                            {epp,enter_file_reply,5,
                                [{file,"epp.erl"},{line,691}]},
                            {epp,init_server,4,
                                [{file,"epp.erl"},{line,552}]}]}

not compatible with 18.0

Hi

I found you using lists:join/2 and string:replace/3 in lsp_syntax.erl
These functions do not exist in 18.0
I think it is better not to use these functions so can be compatible with 18.0

go to symbol in file

Is this functionality planned any time in the near future? Some of us cant live without it.

Add OTP 21 Support

New syntax from OTP 21 is not supported. For example, the new try/catch syntax allows to retrieve the stacktrace directly from the catch clause like that:

try something() of
    Result -> ...
catch
    Class:Reason:Stacktrace -> ...
end

Here, :Stacktrace raise an illegal pattern error!

Thanks for the extension by the way!

Hover not work when edoc parsing error occurs

When edoc parsing error occurs, no hover info can be get from file.
This may be the limitation of edoc, but it is better to skip error and get other hover info.

unknown error parsing specification: {32,edoc_parser,
                                      ["syntax error before: ",[]]}.

repository layout

Let the Typescript source directory be "lib" and the Erlang's "src". This is what other extensions do, and we can use rebar to build the Erlang code without special configuration. The "test" folder can be shared between Erlang and Typescript.

Go To Definition/Peek Definition Got Error

Hi, I got error msg as follow, even on same module file func

[Error - 10:35:17] Request textDocument/hover failed.
  Message: Handler error
  Code: -32001 
[Error - 10:35:18] Request textDocument/definition failed.
  Message: Handler error
  Code: -32001

EditorConfig support?

I have an .editorconfig file as follows;

root = true
[*.{erl,src,hrl}]
indent_style = space
indent_size = 2

Does the auto-formating support these settings?

env: escript: No such file or directory

When I try to run "rebar compile"

screen shot 2018-10-03 at 5 59 07 pm

The vscode output window shows:

screen shot 2018-10-03 at 6 00 50 pm

My setting are:

screen shot 2018-10-03 at 6 01 55 pm

escript resides in /usr/local/bin as shown by:

screen shot 2018-10-03 at 6 03 38 pm

Can someone help me understand what might be going wrong?

Thanks

default keyboard shortcuts

I found shift+cmd+b does't work as intended, i.e. always says "starting rebar compile ... ". when I codes python, ruby, and nodejs, etc. It seems the extension overwrites the "default keyboard shortcuts",
{ "key": "shift+cmd+b", "command": "workbench.action.tasks.build" },
with the erlang specific shortcut,
{ "key": "shift+cmd+b", "command": "extension.rebarBuild" },

The problem is that I cannot disable the shortcuts since there seems no config files for the default keyboard shortcuts in vscode. (vscode seems register the key binding into a registry by a code
workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(BuildAction, BuildAction.ID, BuildAction.TEXT, { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_B }), 'Tasks: Run Build Task', tasksCategory); in vscode/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts and I don't know how to change the registry ).

So I have to remove the extension!!! when writing other language (if I remove the extension, the shortcuts also vanish).

The solution can be easy. it is better to include "when" like (this is rust's example)

{ "key": "ctrl+shift+t",          "command": "rust.cargo.test.debug",
                                     "when": "editorLangId == 'rust'" }, 

in vscode_erlang/package.json

        "keybindings": [
            { "command": "extension.rebarBuild", "mac": "shift+cmd+b", "key": "ctrl+shift+b"},
            { "command": "extension.erleunit", "mac": "shift+cmd+t", "key": "ctrl+shift+t"}
        ],

no auto indenting?

Indenting doesn't seem to work. When I type:

myFunc(X) ->

and hit return, the cursor ends up under the 'm', rather than indented some amount:

erl copy

VS Code 1.8.1
Mac OSX 10.10.5
$ erl -v
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V6.4  (abort with ^G)

Go to definition doesn't work (at least for stdlib modules)

plugin version: 0.5.0 (November 17, 2018)
erlang: 21.1.3, rebar3: 3.7.4, both are installed from homebrew

I have the following code in myfile.erl at line 6:

supervisor:start_link(?MODULE, {Name, Limit, MFA}).

I want to go to definition of function start_link/2:

=INFO REPORT==== 28-Nov-2018::13:34:11 ===
LSP received #{id => 1,jsonrpc => <<"2.0">>,
               method => <<"textDocument/definition">>,
               params =>
                   #{position => #{character => 20,line => 6},
                     textDocument =>
                         #{uri =>
                               <<"file:///Volumes/MacHDD/Users/<username>/<path to project>/myfile.erl">>}}}

=ERROR REPORT==== 28-Nov-2018::13:34:11 ===
LSP handler error error:{badmatch,undefined}

=INFO REPORT==== 28-Nov-2018::13:34:11 ===
LSP sends #{error => #{code => -32001,message => <<"Handler error">>},id => 1}
[Error - 1:34:11 PM] Request textDocument/definition failed.
  Message: Handler error
  Code: -32001 

BTW, documentation does work for that function:

=INFO REPORT==== 28-Nov-2018::13:39:44 ===
LSP received #{id => 3,jsonrpc => <<"2.0">>,
               method => <<"textDocument/hover">>,
               params =>
                   #{position => #{character => 20,line => 6},
                     textDocument =>
                         #{uri =>
                               <<"file:///Volumes/MacHDD/Users/<username>/<path to project>myfile.erl">>}}}

=INFO REPORT==== 28-Nov-2018::13:39:44 ===
LSP sends #{id => 3,
            result =>
                #{contents =>
                      <<"  \n ** start_link(Module, Args) -&gt; startlink_ret()**  \n ** start_link(SupName, Module, Args) -&gt; startlink_ret()**  \n   \nTypes  \n SupName = sup_name() Module = module() Args = term()  startlink_ret() =     {ok, pid()} | ignore | {error, startlink_err()}   startlink_err() =     {already_started, pid()} | {shutdown, term()} | term()   sup_name() =     {local, Name :: atom()} |    {global, Name :: atom()} |    {via, Module :: module(), Name :: any()}    Creates a supervisor process as part of a supervision tree. For example, the function ensures that the supervisor is linked to the calling process (its supervisor). The created supervisor process calls Module:init/1 to find out about restart strategy, maximum restart intensity, and child processes. To ensure a synchronized startup procedure, start_link/2,3 does not return until Module:init/1 has returned and all child processes have been started.   If SupName={local,Name}, the supervisor is registered locally as Name using register/2.   If SupName={global,Name}, the supervisor is registered globally as Name using global:register_name/2.   If SupName={via,Module,Name}, the supervisor is registered as Name using the registry represented by Module. The Module callback must export the functions register_name/2, unregister_name/1, and send/2, which must behave like the corresponding functions in global. Thus, {via,global,Name} is a valid reference.   If no name is provided, the supervisor is not registered. Module is the name of the callback module. Args is any term that is passed as the argument to Module:init/1.   If the supervisor and its child processes are successfully created (that is, if all child process start functions return {ok,Child}, {ok,Child,Info}, or ignore), the function returns {ok,Pid}, where Pid is the pid of the supervisor.   If there already exists a process with the specified SupName, the function returns {error,{already_started,Pid}}, where Pid is the pid of that process.   If Module:init/1 returns ignore, this function returns ignore as well, and the supervisor terminates with reason normal.   If Module:init/1 fails or returns an incorrect value, this function returns {error,Term}, where Term is a term with information about the error, and the supervisor terminates with reason Term.   If any child process start function fails or returns an error tuple or an erroneous value, the supervisor first terminates all already started child processes with reason shutdown and then terminate itself and returns {error, {shutdown, Reason}}.   ">>}}

Ignore unused functions ending with "_test"

Hello, thanks for this awsome plugin!

I have a project with EUnit unit tests inside some of the modules.
Is it possible to ignore unused functions when they end with "_test"?

Handler Exception When Opening File With Erlang Language

I get the following error when opening an erlang file or selecting erlang as the language for a new file:
2018-10-29_11-40

This is the output of the console in the developer tools:
2018-10-29_11-48

I couldn't find any information searching nor could I find a way to get more information on the error. If more information is needed I can provide it.

Feed on the include folder when opening a folder with the usual structure (src, include)

As of 0.18, it seems like the plugin won't feed on the include folder. I get this error:

[ex] {include,file,"rtb_boolean.hrl"}

Which leads to a lot of the source code giving errors. I think it used to feed on that folder so possibly the introduction of new features does not support this yet? I'm fairly new to erlang but I know I can build using rebar3 successfully from the same folder vscode is opened from.

Wrong file opened when breakpoint is hit

Steps to reproduce:

  1. Open an Erlang project and start debugging it
  2. Set a breakpoint in a file from "src" directory and do appropriate action in the Erlang project so the breakpoint is hit
    Expected result: the current line is shown in the file where the breakpoint is set
    Actual result: the copy of the source file from "_build" directory is opened and the current line is shown there
    It works correctly in projects based on rebar "release" template with sources in "apps" directory. But for any other project structure where the sources are in "src" directory the problem exists.

Move the generic LS implementation to a separate repo?

Hi Pierrick,

we recently created an organization named erlang-ls, whose purpose is to have a common space for members of the Erlang community who want to leverage the Language Server Protocol to improve support for the Erlang programming language in the most common editors and IDEs (e.g. Emacs, Vim, Eclipse, VS, etc).

Since it looks like you already have an existing server implementation, I wonder if you would be interested in moving the non-VS specific parts to a separate, common, repo (ideally under the same organization, of which you could become a moderator and collaborator), so that other community members could use it in combination with other clients.

The org is at very early stage (the idea came out during the Code Beam Stockholm) and preliminary discussions are happening at erlang-ls/erlang_ls#1 and in the #language-server channel in the Erlanger Slack.

Regarding licenses, the idea is to release all the components under the erlang-ls org as Apache 2, to be aligned with the license used by Erlang itself.

Let us know if you are interested.

Add more settings to the code formatter

First, thanks y'all for this great project. The actual code formatter causes some weird indentation like:

change_config(Configs) ->
    case lists:keyfind(?APP, 1,
		       application:which_applications())
	of
      false ->
	  ok;
      _ ->
	  lager:debug("Reloading config ~p", [Configs])
    end.

I suspect this happens because it needs a setting for longer line lengths.

Is there any workaround for this or is indeed a limitation of this plugin?

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.