Giter Club home page Giter Club logo

vscode-surround's Introduction

Surround

Visual Studio Marketplace Visual Studio Marketplace GitHub last commit License


A simple yet powerful extension to add wrapper snippets around your code blocks.

Features

  • Now works on VSCode for Web πŸš€New!
  • Supports language identifiers
  • Supports multi selections
  • Fully customizable
  • Custom wrapper snippets
  • You can assign shortcuts for each wrapper snippets separately
  • Nicely formatted (Preserves indentations)
  • Sorts recently used snippets on top

Demo 1: Choosing a wrapper snippet from quick pick menu

Demo 1

Demo 2: Wrapping multi selections

Demo 2

How To Use

After selecting the code block, you can

  • right click on selected code
  • OR press (ctrl+shift+T) or (cmd+shift+T)

to get list of commands and pick one of them.

Hint

Each wrapper has a separate command so you can define keybindings for your favorite wrappers by searching surround.with.commandName in the 'Keyboard Shortcuts' section.

List of commands

Command Snippet
surround.with (ctrl+shift+T) List of all the enabled commands below
surround.with.if if ($condition) { ... }
surround.with.ifElse if ($condition) { ... } else { $else }
surround.with.tryCatch try { ... } catch (err) { $catchBlock }
surround.with.tryFinally try { ... } finally { $finalBlock }
surround.with.tryCatchFinally try { ... } catch (err) {$catchBlock} finally { $finalBlock }
surround.with.for for ($1) { ... }
surround.with.fori for (let i = 0; ... ; i = i + 1) { ... }
surround.with.forEach items.forEach((item) => { ... })
surround.with.forEachAsync items.forEach(async (item) => { ... })
surround.with.forEachFn items.forEach(function (item) { ... })
surround.with.forEachAsyncFn items.forEach(async function (item) { ... })
surround.with.arrowFunction const $name = ($params) => { ... }
surround.with.asyncArrowFunction const $name = async ($params) => { ... }
surround.with.functionDeclaration function $name ($params) { ... }
surround.with.asyncFunctionDeclaration async function $name ($params) { ... }
surround.with.functionExpression const $name = function ($params) { ... }
surround.with.asyncFunctionExpression const $name = async function ($params) { ... }
surround.with.element <element>...</element>
surround.with.comment /** ... */
surround.with.region #region $regionName ... #endregion
surround.with.templateLiteral πŸš€New! ... (Also replaces single and double quotes with backtick)
surround.with.templateLiteralVariable πŸš€New! ${...} (Also replaces single and double quotes with backtick)
surround.with.iife πŸš€New! (function $name($params){ ... })($arguments);

Options

  • showOnlyUserDefinedSnippets (boolean): Disables default snippets that comes with the extension and shows only used defined snippets.
  • showRecentlyUsedFirst (boolean): Recently used snippets will be displayed on top.
  • showUpdateNotifications (boolean): Shows notification when there is a new version of the extension.

Configuration

Each wrapper snippet config object is defined as ISurroundItem like below:

interface ISurroundItem {
  label: string; // must be unique
  description?: string;
  detail?: string;
  snippet: string; // must be valid SnippetString
  disabled?: boolean; // default: false
  languageIds?: string[];
}

Editing/Disabling existing wrapper functions

Go to "Settings" and search for "surround.with.commandName".

Example surround.with.if:

{
  "label": "if",
  "description": "if ($condition) { ... }",
  "disabled": false,
  "snippet": "if(${1:condition}) {\n\t$TM_SELECTED_TEXT\n}$0"
}

Adding new custom wrapper functions

Go to "Settings" and search for surround.custom and edit it like below.

{
  "surround.custom": {
    // command name must be unique
    "yourCommandName": {
      // label must be unique
      "label": "Your Snippet Label",
      "description": "Your Snippet Description",
      "snippet": "burrito { $TM_SELECTED_TEXT }$0", // <-- snippet goes here.
      "languageIds": ["html", "javascript", "typescript", "markdown"]
    },
    // You can add more ...
  }
}

Defining language-specific snippets

With version 1.1.0, you can define snippets based on the document type by using languageIds option.

Visit VSCode docs the full list of language identifiers.

1. Enabling a snippet for ALL languages

If you want to allow a snippet to work for all document types, simply REMOVE languageIds option.

OR set it to ["*"] as below:

{
  "label": "if",
  "description": "if ($condition) { ... }",
  "disabled": false,
  "snippet": "if(${1:condition}) {\n\t$TM_SELECTED_TEXT\n}$0",
  "languageIds": ["*"] // Wildcard allows snippet to work with all languages
}

2. Enabling a snippet for ONLY specified languages

If you want to allow a snippet to work with html, typescript and typescriptreact documents, you can use the example below.

{
  "label": "if",
  "description": "if ($condition) { ... }",
  "disabled": false,
  "snippet": "if(${1:condition}) {\n\t$TM_SELECTED_TEXT\n}$0",
  "languageIds": ["html", "typescript", "typescriptreact"]
}

3. Disabling a snippet for ONLY specified languages

If you want to allow a snippet to work with all document types EXCEPT html, typescript and typescriptreact documents, you can add - (MINUS) sign as a prefix to the language identifiers (without a whitespace).

{
  "label": "if",
  "description": "if ($condition) { ... }",
  "disabled": false,
  "snippet": "if(${1:condition}) {\n\t$TM_SELECTED_TEXT\n}$0",
  "languageIds": ["*", "-html", "-typescript", "-typescriptreact"]
}

IMPORTANT NOTES:

  1. All command names and labels must be unique. If you do not provide a unique command name or label, your custom wrapper functions will override existing ones.
  2. You can redefine all snippets as long as you provide a valid SnippetString. Read More

Contribution

As always, I'm open to any contribution and would like to hear your feedback.

PS: Guide for running @vscode/test-web on WSL 2

Just an important reminder:

If you are planning to contribute to any open source project, before starting development, please always open an issue and make a proposal first. This will save you from working on features that are eventually going to be rejected for some reason.

Logo

I designed the logo on canva.com and inspired by one of their free templates.

LICENCE

MIT (c) 2021 Mehmet YatkΔ±

Enjoy!

vscode-surround's People

Contributors

crouchcd avatar idered avatar j4k0xb avatar phdoerfler avatar yatki avatar yunusemrejs 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

vscode-surround's Issues

Feature request: adding `new Promise` surround

Firstly, thanks for this useful extension!
I didn't see any option to surround with a promise, I think It would be nice to have such option:

new Promise((resolve, reject) => {
        {CODE}
})

Snippets not inserted when nothing is selected

I know the extension is called "Surround", implying you need to surround something :) However this actually used to work with the extension: you used to be able to insert a snippet with nothing selected. But in some recent update (last couple of months?) you have to have something selected for a snippet to be inserted. Would it be possible to make this work again without a selection? Thanks!

Feature Request: Indentation

Referencing issue #2 (indentation):

Great work on the extension. It'd still be fantastic if we could somehow set the indentation to match the current selection's indentation. I see you've ruled it out as "not being part of the use case" - but I respectfully disagree.

I've taken your extension and written a few wrappers for ruby methods, and Rspec tests, and it's great! But I've found when I'm wanting to wrap existing code in existing indentation levels, that it's putting the new wrappers in at indentation 0, and leaving the rest indented as it was.

This isn't ideal as it requires me to highlight and re-indent manually, which I'm beginning to think negates the workflow speed increase for me.

Is it possible to keep the existing indentation level? I could take a look at this if you accept PR's.

Place cursor in snippet

Hi, and thanks for this really useful extension.

Is it possible to place the cursor in the snippet, something like $TM_SELECTED_TEXT, but instead (or both) having the cursor placed somewhere instead of at the end of the inserted snippet ?

(Basically, I would like to add the snippet then hit paste to copy something inside)

Cheers

If no results found, take search input as default

Problem: Typically you have snippets for your most used functions. However, sometimes you might want to surround something with a function you rarely use, that is new etc.

Idea: If the search returns no results, offer the user to use the search term literally and wrap the selected text in (selection)

  • $SEARCH_TERM($TM_SELECTED_TEXT)$0
  • $SEARCH_TERM[$TM_SELECTED_TEXT]$0
  • $SEARCH_TERM{$TM_SELECTED_TEXT}$0
    These are just examples.

This would add another layer of flexibility.

Invalid config deadlocks VSCode menus

Putting something invalid in surround.custom, like:

"surround.custom": {
    "label": "len",
    "description": "len(...)",
    "disabled": false,
    "snippet": "len($TM_SELECTED_TEXT)$0",
}

and then trying to use Surround hangs the extension.
As a result, VSCode Command Palette can't function. None of the menus work. Only solution is to kill/restart VSCode itself.

Multi selection is no longer supported starting from version 1.2.0

1.1.2 still supports multi selection, but newer versions have this feature kind of broken. By broken I mean that, even though multiple selection lines are "selected" and to each one of them you would like to apply a "surround with" wrapper template, it simply won't work.

I find this feature very useful. Could you please bring it back to newest version?

Thanks in advance. Best regards.

need some help

ADD ISSUE DESCRIPTION HERE

Version: 1.77.3
Commit: 704ed70d4fd1c6bd6342c436f1ede30d1cff4710
User Agent: Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Embedder: vscode.dev

Extension version: 1.5.0

Setting to turn off new indentation behavior (in 1.2.0+) per-snippet

Is there a setting to turn off the new indentation behavior (either globally or per-surround snippet)? I have a snippet I use all the time which is to add a parenthesis block and it's broken now because it surrounds the whole line even though I've highlighted a specific block of text

If I had this code,

if some_object is not None or some_other_condition == 42:
   do_something()

and then I highlighted the code "some_object is not None or some_other_condition == 42", it became:

if (
  some_object is not None or some_other_condition == 42
):
   do_something()

Now, no matter what I highlight, it always becomes this, which is not what I want:

(
    if some_object is not None or some_other_condition == 42
):
   do_something()

I probably like this new behavior for most snippets, but I would really need to turn it off for others, like the one highlighted above.

Originally posted by @JordanMandel in #64 (comment)

Can't open settings

When I go to settings, search surround with and open a setting it open a settings.json file and not related to surround extension (latest vscode version)

Can't use "$" in custom snippet

I am trying to create a snippit for time logging of a function

$start = microtime(true); { $TM_SELECTED_TEXT }$0 $time_elapsed_secs = microtime(true) - $start;

When i use it it removes the variables (eg $start) i can understand that it works this way but is there any way to show the variable?

Not adhering to selected text

VS Code v 1.58.2
Just reinstalled this plugin after a computer switch and not using for a couple months...
in html, I often use to put <em> or such around a short section of a string/line. Suddenly seems to not be adhering to my selection, instead surrounding the entire string as it determines. This was not an issue previously.

<li><em>You will identify the metal from its work function.</em></li>
I select "work function" and its surrounds the entire thing.

Vscode crash

Type: Bug

Vscode crash

Extension version: 1.5.0
VS Code version: Code 1.83.0 (Universal) (e7e037083ff4455cf320e344325dacb480062c3c, 2023-10-03T16:13:15.449Z)
OS version: Darwin x64 23.0.0
Modes:

System Info
Item Value
CPUs Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz (12 x 2600)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
video_decode: enabled
video_encode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: enabled
Load (avg) 2, 3, 3
Memory (System) 16.00GB (0.02GB free)
Process Argv . --crash-reporter-id 9779bcea-1a5b-4c6f-9717-664de7cf99e2
Screen Reader no
VM 0%
A/B Experiments
vsliv368:30146709
vsreu685:30147344
python383cf:30185419
vspor879:30202332
vspor708:30202333
vspor363:30204092
vswsl492:30256859
vstes627:30244334
vslsvsres303:30308271
vserr242:30382549
pythontb:30283811
vsjup518:30340749
pythonptprofiler:30281270
vshan820:30294714
vstes263:30335439
vscod805cf:30301675
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
vsaa593:30376534
pythonvs932:30410667
py29gd2263:30856252
vsclangdf:30486550
c4g48928:30535728
dsvsc012cf:30540253
pynewext54:30695312
azure-dev_surveyone:30548225
3biah626:30602489
89544117:30613380
vscrp:30673768
a9j8j154:30646983
showlangstatbar:30737416
pythonfmttext:30731395
9b8hh234:30694863
fixshowwlkth:30771522
showindicator:30805244
pythongtdpath:30769146
i26e3531:30792625
pythonnosmt12:30797651
pythonidxpt:30805730
pythonnoceb:30805159
synctok:30821570
dsvsc013:30795093
dsvsc014:30804076
diffeditorv2:30821572
dsvsc015:30845448
pythonregdiagcf:30859692
pyreplss2:30858576

Custom surround not recognized

I've noticed #3 and I do have 1.0.2 installed. Yet the following is not shown among the Surround with offer.

  "surround.custom": {
    "i18n": {
      "label": "lingui",
      "description": "i18n.t`...`",
      "snippet": "i18n.t`$TM_SELECTED_TEXT`$0",
      "disabled": "false"
    }
  }

Custom surround not recognized

Love the extension, just what I was looking for, need some help, not sure what I'm doing wrong, I just can't get it to recognize custom surrounds.

I have the following in my user settings.json:

I'm on v1.0.2

 "surround.custom": {
    "i18n": {
      "label": "i18n",
      "description": "'hello' ==> {t('hello')} ",
      "snippet": "{t($TM_SELECTED_TEXT)}$0",
      "disabled": false
    },
    "yourCommandName": {
      // label must be unique
      "label": "Your Snippet Label",
      "description": "Your Snippet Description",
      "snippet": "burrito { $TM_SELECTED_TEXT }$0", // <-- snippet goes here.
      "disabled": false
    }
  },
  • The built in commands work, just not the custom ones.

image
image

extençao com problema

Type: Bug

nao consigo iniciar meu projeto java

Extension version: 1.5.0
VS Code version: Code 1.77.2 (e344f1f539a80912a0e9357cec841f36ce97a4e2, 2023-04-06T10:08:02.908Z)
OS version: Windows_NT ia32 10.0.22621
Modes:
Sandboxed: Yes

System Info
Item Value
CPUs 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz (12 x 2688)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_renderer: enabled_on
video_decode: enabled
video_encode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: disabled_off
Load (avg) undefined
Memory (System) 7.77GB (1.58GB free)
Process Argv --crash-reporter-id ae6aed8c-c464-4e3b-a5b0-85c232495e52
Screen Reader no
VM 0%
A/B Experiments
vsliv368cf:30146710
vsreu685:30147344
python383cf:30185419
vspor879:30202332
vspor708:30202333
vspor363:30204092
vslsvsres303:30308271
vserr242:30382549
pythontb:30283811
vsjup518:30340749
pythonptprofiler:30281270
vshan820:30294714
vstes263:30335439
vscorecescf:30445987
pythondataviewer:30285071
vscod805cf:30301675
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
cmake_vspar411:30581797
vsaa593cf:30376535
pythonvs932:30410667
cppdebug:30492333
vsclangdf:30486550
c4g48928:30535728
dsvsc012:30540252
pynewext54:30695312
azure-dev_surveyone:30548225
nodejswelcome1cf:30587006
2e4cg342:30602488
pyind779:30671433
89544117:30613380
pythonsymbol12:30671437
6233i204:30672705
vsctsb:30705553
defaultazurewalk:30687958
pythonms35:30701012
pythonfmttext:30710681
pythonclientmvcf:30708686

Surround With <element>replacement state

When performing a Surround With: and after the insertion is completed the editor is left in Column Select Mode with a cursor at both the opening and closing inserted elements

Custom surround doesn't seem to work

Hello, I'm trying to add a new custom surround snippet as below

"surround.custom": {
    "yourCommandName": {
        // label must be unique
        "label": "Your Snippet Label",
        "disabled": false,
        "description": "Your Snippet Description",
        "snippet": "burrito { $TM_SELECTED_TEXT }$0" // <-- snippet goes here.
      },
},

Yes, it's actually the demo from your readme, but it doesn't get generated or seem to run. Did I do anything wrong?

Hide or remove some of the surrounds

I want to use this extension for C++ and code in C++ only. Is it possible, to hide or remove some of the surround commands when working with C++?

Not sure if possible, but what would be great is a list of languages one can set for each surround and when the current language is different the command won't show up. E.g. all the JS only commands do not make any sense in C++

Custom snippet list is broken after first surround

I have several custom snippet.
I just noticed that, after firing up vscode and use it for the first time, it will be the only option that shows in the custom snippet list after.

For example if I have A B C as custom snippets, I open vscode and use B, after that every command Surround with will only have B as the custom one, A and C disappear.

EDIT: I just checked and the error started with ver 1.1.0, when languageId support was introduced. That must be the problem.

record

Multi-select causes first selection to be duplicated

Hi!

When I select multiple lines and use surround with, it causes the first line to be duplicated across all of the selections. Here's what I mean:

Code_rvmp4SPSXR

Is there a way to fix this so that each selection retains its original text?

Thanks!

[Feature Request] Add a way to customize placeholder variables

When I surround this with try/catch:

test();

I get this:

try {
  test();
} catch (err) {
  
}

I always write catch (e) in my code, so it would be handy if we could somehow customize these code snippets. But obviously not the end of the world if it doesn't happen. πŸ˜‰

Publish extensions to open-vsx

I'm a VS Codium user, a FLOSS version of VS Code, it's the same code but without the Microsoft's telemetry and branding.
I want to request if possible to add the Surround extension on the open-vsx.org market to us doesn't need to works with the Microsoft marketplace as is unclear if it's legal to use it on VS Code forks, see here.

Additional info:

  • This is how to publish a new extension.

Automatically maintain indent level

If you surround an already indented piece of code, the new lines are added with no indentation.
It would be great if the new lines could be at the current indentation level, and then the surrounded code indented one level inside it. Thanks.

Consider switching to another activation event policy

First, thanks for this extension! Just a minor thing: I noticed this extension will be activated whenever VSC starts up.

As the API reference states:

To ensure a great user experience, please use this activation event in your extension only when no other activation events combination works in your use-case.

There are some other similar extensions that use a more specific activation event to activate only when needed (e.g. when a surround command is triggered).

Backslash in snippet

Hi,

I am trying to create a custom snippet for LaTeX macros that looks like this:

"LaTeX macro": {
    "label": "LaTeX macro",
    "description": "Surround with a LaTeX macro",
    "snippet": "\\$1{$TM_SELECTED_TEXT}$0",
    "languageIds": [
        "latex"
    ]
},

But if I apply it to the selection foobar it generates $1{foobar}, instead of \{foobar} with the cursor located next to the backslash. If I remove the escaped backslash \\ in the snippet I get correct behavior for the cursor.

I infer that there is some issue handling either backslashes or escaped characters?

where do I edit the snippets?

hi lovely extension! I tried adding js snippets via the snippets manager and they don't show up in your extension - how do I add snippets directly to it?

Automatically surround selected text

Is it possible to have selected text surrounded automatically from a limited set of characters?

Let's assume I have the symbol foobar and want it to become "foobar". So I would select it and just type (without opening up the "surround with" menu) " and the result would be an automatic surrounding with a starting and an ending ".

It would make sense (configurable) for:

  • " -> "
  • ' -> '
  • { -> }
  • ( -> )
  • [ -> ]
  • < -> > (if you add a callback option here, where the user writes the callback, it could even add the closing element tag or differentiate between empty and non empty tags)
  • / -> /
  • @ -> @ (in this case, maybe a repeated use of @ would need to be recognized. So @@ -> @@)
  • any comment delimiters, that have an opening and a closing symbol. XQuery example: (: -> :)

I did not install the extension, since such feature is not mentioned in the documentation. Should this feature be missing, could you please think about it? Thank you! :-)

Add support for IIFEs

Thank you for the plugin,

I was recently working on an old AngularJS project and a lot of the code wasn't IIFE-ed....I wrote a custom wrapper for IIFEs and I thought since it's a popular javascript pattern, you might want to add it to the main wrappers.

Here is my implementation:

"IIFE": {
    "label": "IIFE",
    "description": "Wrap with Immediately Invoked Function",
    "snippet": "(function(){\n\n\t$TM_SELECTED_TEXT\n\n})();$0"
}

How do I use $_GET[

Great addon BTW.

How do I use $_GET[

"snippet": "if($_GET['debug']==1){\n$TM_SELECTED_TEXT\n};$0",

Possible to add shortcut for template literal interpolation?

Hi,
Would it be possible to add a command and shortcut for interpolating selected text inside an ES6 template literal? It was not too hard to add it myself using your surround.custom template, but I bet people would love it as a default. I spent about an hour looking through the extension Marketplace and could not find one that did it.

"surround.custom": {
  "interpolateTemplateLiteralSubstring": {
    "label": "interpolate",
    "description": "hello ==> ${hello}",
    "snippet": "\\${$TM_SELECTED_TEXT}$0",
  }
}

all language support plan

hi yatki,
thanks for your work,
and seems that this extension is native supported for typescript and javascript.
and these is also same feature for anyother languages.

after simple peeking of your code, it is implemented by code snippet with ${TM_SELECTED_TEXT}
and I believe that that will be a bad experience for user to add settings to support other languages.

so, here is proposal:

  1. scan the specify language code snippet that contains ${TM_SELECTED_TEXT} and cache them for forth usage
  2. start a plan to support other language by separate config file. and accept Contribution from the community
    e.g.:
    add file c.json that contains surround-grammar or code snippet ${TM_SELECTED_TEXT} like

https://github.com/heartacker/snippet-dog/blob/4909e9528de252d17059b7568d415a9960d3da41/snippets/c.json#L4-L20

and csharp.json for c# and so on.

after that, this extension will support all other languages, not only ts/js native

Indentation

Hi. Great extension!

It would be even greater if the inserted code would have the same indentation as the surrounding code.

/john

Surround with Region support for C#

Is it possible to remove the line comment on the start and end region directives in C#?

From:
// #region
...
// #endregion

To:
#region
...
#endregion

TIA.

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.