Giter Site home page Giter Site logo

perl-ide / coc-perl Goto Github PK

View Code? Open in Web Editor NEW
34.0 1.0 0.0 581 KB

Enable Perl5 language server on VIM/NeoVIM through coc-nvim.

Home Page: https://www.npmjs.com/package/coc-perl

License: MIT License

TypeScript 92.70% JavaScript 7.30%
perl vim neovim coc lsp

coc-perl's Introduction

coc-perl

Perl Language client for Language Server Protocol through coc.nvim.

coc-perl

Language Servers support

This project supports two different language servers:

  1. Perl-LanguageServer;
  2. PerlNavigator.

Being that each has its own characteristics and are differentiated through the way you enable and configure them in CoC configuration file.

Installation

In the current version of coc-perl, both supported language servers are automatically installed in case you don't have it already, meaning you only need to define which server you want to enable in CoC configuration.

Prerequisites

For Perl::LanguageServer you need to have cpan installed in your host system. The way coc-perl installs it is by executing cpan Perl::LanguageServer with a specific version (the latest supported version). However, you can manually install it on your system or your local library path in case you're using PerlBrew, preventing any installation done by coc-perl.

Now, for PerlNavigator, coc-perl also handles it automatically, but it requires git to be installed. In case you decide to install it manually, since it's not present in CPAN and its initialization is entirely written in TypeScript rather than Perl, you need to follow what's described on PerlNavigator repository about installing it on other editors. In summary, you need to clone the repository, install the server running the npx tsc command from within server's folder and take note of the absolute path for the generated code, for instance /home/<user>/PerlNavigator/server/out/server.js, which will be needed when configuring CoC later on.

Installing coc-perl

Inside (neo)vim run this command:

:CocInstall coc-perl

or, you can set g:coc_global_extensions.

let g:coc_global_extensions = [
      \ 'coc-perl',
\ ]

or even install directly via any plugin manager, for example, with vim-plug:

Plug 'bmeneg/coc-perl'

Automatic language server installation

When coc-perl is installed for the first time, you probably won't have any configuration referring to what language server you want to enable, thus neither Perl::LanguageServer nor PerlNavigator will be installed. Make sure to after installing coc-perl, enable one of the servers in coc.nvim configuration file (keep reading the next sections to know how perform such action) and then reopen a Perl file or, in case you're already with a Perl file opened, call :CocRestart, so the automatic installation process can take place considering the choice you made regarding the language server.

Choosing a Language Server

To enable a language server an option must be added to the coc-settings.json file, which can be accessed through the (neo)vim command :CocConfig. However, before directly enabling them, it's important to understand how the configuration properties are defined for each server.

Configuration properties

As said before, coc-perl supports two different Perl language servers: Perl::LanguageServer (hereafter referred as p::ls) and PerlNavigator (hereafter referred as navigator). Each has its own set of options to be set on :CocConfig and coc-perl support them completely.

Originally, for those using p::ls in VSCode or older versions of coc-perl, the default properties can be used, like perl.*, while for newcomers, it's recommended the new coc-perl format to avoid confusion, perl.p::ls.*. Now, for navigator, the original format is also supported, perlnavigator.*, but in the same way the new format is recommended when using it with coc-perl, perl.navigator.*.

Enabling one server

Only one language server can be enabled at a time. In case both are enabled, an error will be prompted on :CocOpenLog and no server action will be seen on (neo)vim's buffer.

For enabling p::ls, you can use either options (the first is preferred):

{
    "perl.p::ls.enable": true
}
{
    "perl.enable": true
}

And for navigator:

{
    "perl.navigator.enable": true,
}

or using the original configuration property (not recommended):

{
    "perlnavigator.enable": true,
}

If you're using a development branch of navigator, manually downloaded and/or installed, you'll need one additional option: the server absolute path.

    "perl.navigator.serverPath": "/home/<user>/PerlNavigator/server/out/server.js"

Other options

As user, you can change and pass different options to each language server, however, the options are tied to the server version being used. Because of that, make sure to always run the newest version of the server alongside the coc-perl extension. A brief example of using different options are as follows:

{
    "perl.p::ls.enable": true,
    "perl.p::ls.logLevel": 2,
    "perl.p::ls.logFile": "/home/<user>/coc-perl.log",

    "perl.navigator.enable": false,
    "perl.navigator.serverPath": "/home/<user>/PerlNavigator/server/out/server.js"
}

You can have options for both servers in the configuration file, but only one server can be enabled at a time, meaning that options for the disabled server won't reach the enabled server.

For a detailed list of all options, please visit PerlNavigator and Perl-LanguageServer repositories.

Differences from VSCode extension

Unfortunatelly not all features supported in the original VSCode extension are available in coc-perl due to the differences between VSCode extension core code and coc.nvim. Although Language Server Protocol is fully compatible, the Debug Adapter Protocol (DAP) is missing from coc.nvim, cause the features related to lauching and debugging Perl code non-existent on (neo)vim through coc-perl.

For those navigating the extension code will notice some "DAP-related" variables are defined and "used", but in reality they have no operation at all, serving just as placeholders to allow transparent use of VSCode extension configuration file. Working is being done in different fronts to get DAP support to neovim as soon as possible, but a third plugin might be required (besides coc.nvim and coc-perl).

Whenever a decent and full-featured support lands through another project, instructions will be presented in this README file.

Troubleshooting

Before filling an issue, it's important to gather some information to use as entry point. Make sure to copy the contents from :CocConfig, :CocOpenLog and :CocCommand workspace.showOutput.

:CocConfig is important to understand how you're trying to use the extension and the server. :CocOpenLog shows the log for coc.nvim itself, when trying to initialize the extension and the server. Finally, when issuing :CocCommand workspace.showOutput a selections window will pop up to choose the server (Perl::LanguageServer or PerlNavigator) and, once you have done that, any errors from the server will be shown in a new buffer. Only then, an issue can be filled with all this information presented inline.

But remember, server's code are far more complicated than this client extension, meaning that most of the bugs will be related to the server. Make sure to search for the symptoms you're experiencing in server's repository either.

Maintainers

bmeneg - Maintainer
ulwlu - Project creator and former maintainer

coc-perl's People

Contributors

bmeneg avatar dependabot[bot] avatar

Stargazers

Tikhon Belousov avatar  avatar Joris Clement avatar Ye Zhaoliang avatar Anish avatar  avatar xztaityozx avatar MOCHIZUKI Natsune avatar Dave M avatar Elvin Aslanov avatar Nick Pongratz avatar Thibault Duponchelle avatar Olaf Alders avatar  avatar Alex Seitsinger avatar wzy avatar thef avatar Georgiy Odisharia avatar conanforever22 avatar Breno Reis avatar Nick S. Knutov avatar Chris Weyl avatar  avatar Normen Hansen avatar Truong Tran avatar Rosin avatar Artificial avatar Jeff Cook avatar  avatar Sukhorukov Olexandr avatar tandy avatar Oriol Soriano avatar  avatar  avatar

Watchers

 avatar

coc-perl's Issues

Help please.

After installing the extension with CocInstall coc-perl, it does not appear as a source. What can i do to fix this?

Please help getting started

I installed everything (Perl::LanguageServer, Node.js, coc-nvim and coc-perl, all within Linux Mint 21.1)
Perl::LanguageServer works with VScode. As a short test I created a very short Perl file, reformated it, added a syntax error which was reported, so the Server works as expected.

Within vim I tried the same after installing coc-perl. Since I did not want to rely on a key binding I did the first test with a command: :call CocActionAsync('format') -- no effect (Perl::Tidy is installed)

:CocInfo gives this:

## versions
  
  vim version: VIM - Vi IMproved 8.2 8024919
  node version: v19.7.0
  coc.nvim version: 0.0.82-b7375d5f 2023-01-30 05:09:03 +0800
  coc.nvim directory: /home/myuser/.vim/plugged/coc.nvim
  term: dumb
  platform: linux
  
  ## Log of coc.nvim
  
  2023-03-03T18:10:47.527 INFO (pid:2723) [extension:coc-perl] - extension "perl" is now active
  2023-03-03T18:10:47.527 INFO (pid:2723) [extension:coc-perl] - cmd: perl args: -MPerl::LanguageServer -e Perl::LanguageServer::run -- --p  ort 13604 --log-level 1 --log-file  --version 2.3.0
  2023-03-03T18:10:47.532 INFO (pid:2723) [plugin] - coc.nvim initialized with node: v19.7.0 after 186
  2023-03-03T18:10:47.541 INFO (pid:2723) [language-client-index] - Language server "perl" started with 2738
  2023-03-03T18:11:08.724 INFO (pid:2723) [attach] - receive notification: format []
  2023-03-03T18:11:08.727 ERROR (pid:2723) [attach] - Error on notification format Error: Format provider not found for buffer: 1
      at ob.documentFormat (/home/myuser/.vim/plugged/coc.nvim/build/index.js:261:28087)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async ob.formatCurrentBuffer (/home/myuser/.vim/plugged/coc.nvim/build/index.js:261:27847)
      at async _b.cocAction (/home/myuser/.vim/plugged/coc.nvim/build/index.js:281:46242)
      at async EventEmitter.<anonymous> (/home/myuser/.vim/plugged/coc.nvim/build/index.js:281:47836)
  2023-03-03T18:11:09.026 INFO (pid:2723) [attach] - receive notification: highlight []
[ and more highlight lines ... ]

Then I also changed the code to trigger a syntax error warning but nothing.
I also tried to jump from a function call to the definition but nothing happens. (I tried the .vimrc example from the coc.nvim README and then "gd")

So I seem to have a running extension that does nothing. What am I missing?

Add support for PerlNavigator

PerlNavigator is gaining a really nice traction from Perl community as a new and promising language server to Perl, which was mentioned by @oalders on his talk at TPRC 2023 and I also had the opportunity to have a quick chat with its maintainer (@bscan) on Reddit about adding its support to coc-perl, thus enabling a quick and easy language server setup with sane defaults for VIM/NeoVIM users.

Right now, coc-perl is fully dedicated to Perl::LanguageServer, which is in active development too (although PR integration might take some time). The idea is not to remove Perl::LanguageServer support from coc-perl, but add PerlNavigator as an alternative to the user.

I'm not quite sure, yet, which will be chosen as the "default" language server, but time and experimentation will tell.
The way I envision it is:

  • In coc-settings.json, Perl::LanguageServer will be referenced as pls and PerlNavigator as navigator;
  • Only one should be enabled at a time;
  • Specific server options will have its own namespace, ie. perl.nagivator.enable = true or perl.pls.enable = true;
  • Extension specific options will be kept on the root property namespace, ie. perl.logFile;
  • Extension should check which server is installed at user's machine before enabling one or another;
  • In the first versions, in case both server are enabled by the user, extension should present an error message and exit.

More to come...

Q: Will it completely fork from how usually coc.nvim extensions work in other languages, which usually a simple copy'n'paste from VSCode configuration is enough?
A: Yes, but I'll figure out some way to keep things backwards-compatible, which depends on how PerlNavigator works, which I'm not really aware of yet.

Cannot assign to read only property 'p::ls' of object '#<Object>'

Hi, so I installed cpan Perl::LanguageServer -> GRICHTER/Perl-LanguageServer-2.6.1.tar.gz on quite old machine with perl v5.28.1 on linux Fedora 29.

I installed coc-perl on nvimv0.9.1 and then I added "perl.p::ls.enable": true to :CocConfig.

On startup, I am not getting the following message:

[coc.nvim]: UnhandledRejection: Cannot assign to read only property 'p::ls' of object '#<Object>'                                                
TypeError: Cannot assign to read only property 'p::ls' of object '#<Object>'                                                                     
    at fu.extractSettingsInformation (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:236:34391)                                
    at o (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:236:33554)                                                            
    at fu.onDidChangeConfiguration (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:236:33785)                                  
    at fu.register (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:236:32929)                                                  
    at fu.initialize (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:236:32655)                                                
    at jd.initializeFeatures (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:241:21721)                                        
    at jd.doInitialize (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:241:12715)                                              
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)                                                                
    at async jd._start (/home/STRIKETECH/kcukrowski/.vim/plugged/coc.nvim/build/index.js:241:7820)                                               

I do not reallly know what to do with it, as the errors is inside coc.nvim.

Thank you for any help!

Messages not being displayed

Hello, I have just installed this extension since I'm moving from VSCode to NVim.

One of the problems I'm encountering with is that the error messages that should be displayed by line, are not being shown, even if my mouse or cursor is on the line. This only appears on this extension, but not on others.

imagen

imagen

I have no aditional configuration. Is there any more data I should provide?

[coc.nvim] The "perl" server crashed 4 times in the last 3 minutes. The server will not be restarted.

I get the following errors every time I try to edit a Perl file under Windows 11:

[coc.nvim]: UnhandledRejection: Connection to server got closed. Server will not be restarted.
[coc.nvim]: Error: Connection to server got closed. Server will not be restarted.
[coc.nvim]:     at LanguageClient.handleConnectionClosed (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:49812:43)
[coc.nvim]:     at LanguageClient.handleConnectionClosed (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:52116:15)
[coc.nvim]:     at closeHandler (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:49783:16)
[coc.nvim]:     at CallbackList.invoke (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12702:35)
[coc.nvim]:     at Emitter43.fire (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12753:34)
[coc.nvim]:     at closeHandler (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:13488:24)
[coc.nvim]:     at CallbackList.invoke (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12702:35)
[coc.nvim]:     at Emitter43.fire (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12753:34)
[coc.nvim]:     at StreamMessageReader2.fireClose (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12895:27)
[coc.nvim]:     at Socket.<anonymous> (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12977:42)
[coc.nvim] The "perl" server crashed 4 times in the last 3 minutes. The server will not be restarted.

:CocInfo shows:

## versions

vim version: VIM - Vi IMproved 9.0 9000195
node version: v18.4.0
coc.nvim version: 0.0.82-761db753 2022-08-12 22:58:30 +0800
coc.nvim directory: C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim
term: undefined
platform: win32

## Log of coc.nvim

2022-08-12T22:08:24.286 INFO (pid:76924) [services] - registered service "languageserver.intelephense"
2022-08-12T22:08:24.287 INFO (pid:76924) [services] - registered service "languageserver.bash"
2022-08-12T22:08:24.378 INFO (pid:76924) [extension:coc-perl] - extension "perl" is now active
2022-08-12T22:08:24.378 INFO (pid:76924) [extension:coc-perl] - cmd: perl args: -MPerl::LanguageServer -e Perl::LanguageServer::run -- --port 13603 --log-level 0 --log-file  --version 2.3.0
2022-08-12T22:08:24.385 INFO (pid:76924) [plugin] - coc.nvim initialized with node: v18.4.0 after 214ms
2022-08-12T22:08:24.394 INFO (pid:76924) [language-client-index] - Language server "perl" started with 77600
2022-08-12T22:08:24.979 INFO (pid:76924) [language-client-index] - Language server "perl" started with 73548
2022-08-12T22:08:25.566 INFO (pid:76924) [language-client-index] - Language server "perl" started with 49492
2022-08-12T22:08:25.909 INFO (pid:76924) [attach] - receive notification: highlight []
2022-08-12T22:08:26.153 INFO (pid:76924) [language-client-index] - Language server "perl" started with 74576
2022-08-12T22:08:26.744 ERROR (pid:76924) [server] - unhandledRejection  Promise {
  <rejected> Error: Connection to server got closed. Server will not be restarted.
      at LanguageClient.handleConnectionClosed (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:49812:43)
      at LanguageClient.handleConnectionClosed (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:52116:15)
      at closeHandler (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:49783:16)
      at CallbackList.invoke (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12702:35)
      at Emitter43.fire (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12753:34)
      at closeHandler (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:13488:24)
      at CallbackList.invoke (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12702:35)
      at Emitter43.fire (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12753:34)
      at StreamMessageReader2.fireClose (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12895:27)
      at Socket.<anonymous> (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12977:42)
} Error: Connection to server got closed. Server will not be restarted.
    at LanguageClient.handleConnectionClosed (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:49812:43)
    at LanguageClient.handleConnectionClosed (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:52116:15)
    at closeHandler (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:49783:16)
    at CallbackList.invoke (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12702:35)
    at Emitter43.fire (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12753:34)
    at closeHandler (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:13488:24)
    at CallbackList.invoke (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12702:35)
    at Emitter43.fire (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12753:34)
    at StreamMessageReader2.fireClose (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12895:27)
    at Socket.<anonymous> (C:\Users\Heptite\vimfiles\pack\neoclide\opt\coc.nvim\build\index.js:12977:42)
2022-08-12T22:08:40.052 INFO (pid:76924) [attach] - receive notification: showInfo []

Is this a coc.nvim issue or an issue with this language server?

How to install perl navigator?

Hi,

I just had, again, a new painfull installation process on a nvim functionality... I was joyfull to have coc.nvim working straighaway on my config, I just installed a couples of LSP like coc-sh in 2 sec, and then, I run :CocInstall coc-perl on the prompt. I open a perl file and... nothing happens... I was thinking they were installed automatically like the read me says: "In the current version of coc-perl, both supported language servers are automatically installed in case you don't have it already, meaning you only need to define which server you want to enable in CoC configuration." But in fact not isn't it?

my (sad) story!

I tried first the Perl Language Server. Nothing works. I realiaze in fact it is not installed, i install it from cpan and then... I run in the same bug than this recent issue rises. I try a bit to debug, to complicate, I give up. Ok, I try pelnavigator, and... I can't figure out how to install it! There is a binary from the github, but I can't figure out how it can works, so I try the install process for other editors. But I am not amiliar with npm packages, I already hate them from previous bad similar experiences than this one. I am thinking than the npm installation gonna create on the computer, somewhere, a PerlNavigator folder with everything inside and the server. So I run the install process, I delete the tmp git folder and I run my fzf-fd superfast finder on the all computer to find the server.js file. Nothing. I tried then to find a tuto on the web during an hour. I did'nt find any clues. So I came back and at the end, I understood than in fact I needed to keep the perlnavigator git clone folder, it was him the final folder of the "installation" which is not a real one in my mind, but anyway. SO, why it is so complicated? Why I had to loose two hours of my life just to make work a such simple feature? Just because the doc is not enough clear for the "newbies" like me who are not familiar with LSPs or npm packages. I am not blaming this repo, the Perlnagator repo is no more clear in its doc, but I post here this clarification because that's the first repo where the people are gonna try to find a help in case of problem...

The solution!

  • First, follows the the install process for "other editors" of perlnavigator. Git clone the repo somewhere you want te perlnavigator folder to be here, as it gonna be permanent.

  • Second, run :CocInstall coc-perl in vim see: below

  • ThirdSecond, add this in coc-settings.json via :CocConfig
    Replace the path of server.js by your path

{
  "languageserver": {
    "perlnavigator": {
      "command": "node",
      "args": [
        "/home/<user>/.config/PerlNavigator/server/out/server.js",
        "--stdio"
      ],
      "filetypes": ["perl"]
    }
  }
}

And it should work!

WAIT, I am not using coc-perl !! The above block of json code run perlnavigator via coc.nvim directly, it is not using the coc-perl config. In fact I can uninstall coc-perl (what I did) and the completions still works perfectly well! When I tried to install coc-config and write the piece of config code recommanded, I run in this issue:
CocLog:

2023-09-10T00:56:07.577 INFO (pid:148822) [configurations] - Add folder configuration from file: /home/archx/.config/.vim/coc-settings.json
2023-09-10T00:56:07.679 ERROR (pid:148822) [extension:coc-perl] - coc-perl activated, but more than one server enabled
2023-09-10T00:56:07.681 INFO (pid:148822) [plugin] - coc.nvim initialized with node: v20.5.1 after 6236

I tried this three syntaxes in the coc-settings.json file:

{
    "perl.navigator.enable": true,
    "perl.navigator.serverPath": "/home/<user>/PerlNavigator/server/out/server.js"
}
{
    "perlnavigator.enable": true,
    "perlnavigator.serverPath": "/home/<user>/PerlNavigator/server/out/server.js"
}
{
  "languageserver": {
    "perlnavigator.enable": true,
    "perlnavigator.serverPath": "/home/<user>/PerlNavigator/server/out/server.js"
  }
}

So, at the end, what happends? I still don't know... But I arrived to make perlnavigator completions working... without coc-perl in fact... strange!

Error on notification jumpDefinition

As mentioned in another issue (#19) the "go to definition" command doesn't work. As suggested I did some logging
and (hopefully) attached the log file:
coc-perl.log

Funny, it says the language server doesn't support it, though it certainly should (and the server installation worked without error)

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.