Code Monkey home page Code Monkey logo

lsp-intelephense's People

Contributors

8ctopus avatar dependabot-preview[bot] avatar dependabot[bot] avatar husanjun avatar jfcherng avatar predrag-codetribe avatar predragnikolic avatar rchl avatar rwols 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

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

husanjun 8ctopus

lsp-intelephense's Issues

How to configure intelephense

How can I add an path to the file exclusions list in intelephense?

In COC / VS Code we have to use

"intelephense.files.exclude": [
        "**/.js",
        "**/.png",
        "**/.jpg",
        "**/.css",
        "**/.pdf",
        "**/.txt",
        "**/Volume/aaa/**",
        "**/Volume/bbb/**"
],

But as per #10, we have to use

            "files": {
                "exlude": [
                    "**/branch-*/**",
                ],
            },

I tried excluding all files by setting it to **/** and neither worked for me.

Intelephense disabled NoneType, no attribute cache_path

Hi! With the current installed package I have some problems starting lsp-intelephense. I get the following traceback when using the following versions:

Sublime Text: 4126
Sublime-lsp: 1.16.1
lsp-intelephense: 1.0.24

Unable to start subprocess for LSP-intelephense
Traceback (most recent call last):
  File "C:\<snip>\Installed Packages\LSP.sublime-package\plugin/core/windows.py", line 246, in start_async
    additional_variables = plugin_class.additional_variables()
  File "C:\<snip>\AppData\Roaming\SUBLIM~1\Packages\LSP_UT~1\st3\lsp_utils\_client_handler\abstract_plugin.py", line 96, in additional_variables
    return cls.get_additional_variables()
  File "C:\<snip>\Installed Packages\LSP-intelephense.sublime-package\plugin.py", line 33, in get_additional_variables
AttributeError: 'NoneType' object has no attribute 'cache_path'

LSP-intelephense did not respond to the initialize

How to solve this problem?

I have installed LSP and LSP-intelephense.

I am using NVM to manage node. Do I need to install node without NVM?

LSP-intelephense: Installing server.
Exception in thread Thread-3:
Traceback (most recent call last):
  File "./python3.3/threading.py", line 901, in _bootstrap_inner
  File "./python3.3/threading.py", line 858, in run
  File "/Users/andremacola/Library/Application Support/Sublime Text 3/Packages/lsp_utils/st3/lsp_utils/server_npm_resource.py", line 21, in run_in_thread
    subprocess.check_call(popen_args, shell=sublime.platform() == 'windows')
  File "./python3.3/subprocess.py", line 542, in check_call
  File "./python3.3/subprocess.py", line 523, in call
  File "./python3.3/subprocess.py", line 819, in __init__
  File "./python3.3/subprocess.py", line 1448, in _execute_child
FileNotFoundError: [Errno 2] No such file or directory: 'npm'
lsp-intelephense for /Users/andremacola/Work/Onyx/Paper did not initialize properly. Disabling until this window is restarted
Traceback (most recent call last):
  File "/Users/andremacola/Library/Application Support/Sublime Text 3/Installed Packages/LSP.sublime-package/plugin/core/windows.py", line 335, in get_session
    return self._find_session(config_name, file_path)
  File "/Users/andremacola/Library/Application Support/Sublime Text 3/Installed Packages/LSP.sublime-package/plugin/core/windows.py", line 345, in _find_session
    if session.handles_path(file_path):
  File "/Users/andremacola/Library/Application Support/Sublime Text 3/Installed Packages/LSP.sublime-package/plugin/core/sessions.py", line 208, in handles_path
    with self.acquire_timeout():
  File "./python3.3/contextlib.py", line 48, in __enter__
  File "/Users/andremacola/Library/Application Support/Sublime Text 3/Installed Packages/LSP.sublime-package/plugin/core/sessions.py", line 201, in acquire_timeout
    raise InitializeError(self)
LSP.plugin.core.sessions.InitializeError: lsp-intelephense did not respond to the initialize request within 3 seconds

Add sublime-package.json

At work I have a few odd paths that I needed to add for intelephense. As it turns out I can use intelephense.environment.includePaths for that.

bmewburn/vscode-intelephense#253

It would be nice if this package had a sublime-package.json so I don't have to dig through github issues :)

Somehow ending up with duplicate definitions in tooltips

When I load a file or restart ST, I mouseover and I get one definition:

image

When I make a change, I see the original and the current:

image

I'm not sure where the issue is, LSP, LSP-intelephense, or Intelephense, so I'm starting here and would be glad for help with figuring that out. I don't seem to have the same issue in VSCode with that Intelephense extension.

This seems to be reflected in more than just tooltips, but this was the easiest way to show it.

Stubs - Wordpress is possible?

Is it possible to add wordpress stubs like in vscode? This is my LSP-intelephense settings but wordpress stubs is not loaded by the plugin.

{
	"initializationOptions":
	{
		"clearCache": true,
		"storagePath": null
	},
	"languages":
	[
		{
			"languageId": "php",
			"scopes":
			[
				"source.php"
			],
			"syntaxes":
			[
				"Packages/PHP/PHP.sublime-syntax"
			]
		}
	],
	"settings":
	{
		"stubs": [
			"apache",
			"bcmath",
			"bz2",
			"calendar",
			"com_dotnet",
			"Core",
			"ctype",
			"curl",
			"date",
			"dba",
			"dom",
			"enchant",
			"exif",
			"FFI",
			"fileinfo",
			"filter",
			"fpm",
			"ftp",
			"gd",
			"gettext",
			"gmp",
			"hash",
			"iconv",
			"imap",
			"intl",
			"json",
			"ldap",
			"libxml",
			"mbstring",
			"meta",
			"mysqli",
			"oci8",
			"odbc",
			"openssl",
			"pcntl",
			"pcre",
			"PDO",
			"pdo_ibm",
			"pdo_mysql",
			"pdo_pgsql",
			"pdo_sqlite",
			"pgsql",
			"Phar",
			"posix",
			"pspell",
			"readline",
			"Reflection",
			"session",
			"shmop",
			"SimpleXML",
			"snmp",
			"soap",
			"sockets",
			"sodium",
			"SPL",
			"sqlite3",
			"standard",
			"superglobals",
			"sysvmsg",
			"sysvsem",
			"sysvshm",
			"tidy",
			"tokenizer",
			"xml",
			"xmlreader",
			"xmlrpc",
			"xmlwriter",
			"xsl",
			"Zend OPcache",
			"zip",
			"zlib",
			"wordpress"
		]
	}
}

Show info about uncaught exceptions

Someone tell me if there is ever support for Info messages about uncaught exceptions thanks to the @throws tag in the docblock. Similar to the Info message about the @deprecated tag🙌🏽🙌🏽🙌🏽

When I took a java course with lsp-jdtls I noticed that when I don't handle possible exceptions it gives me an info, even a quickFix to group the code in a try/catch.

It would be great to have the same functionality in php

Compiled extensions

At work there are quite a bit of compiled extensions. Intelephense does not provide completions for these extensions. How can I make intelephense understand compiled extensions?

How can I force a reindexing of the workspace?

How can I force the language server to re-index all files? On vim with coc plugin I can run the following command

:CocCommand intelephense.index.workspace

Is there a similar option in LSP-Intelephense?

Is textDocument/definition supposed to work on require_once?

I don't know much about PHP but I have to use it for my job sometimes. There are some PHP files which contain a require_once line, something like require_once('foo/bar/baz.php').

Similarly in C++ you can write #include "foo/bar/baz.hpp". clangd, a language server for C++ files, allows me to "goto definition" on that line, and it opens the included file. Is this also supposed to work like this in intelephense? If not I might open an issue about it on the intelephense repo.

Add an auto_complete_selector

The trigger chars of this server are:

['$', '>', ':', '\\', '/', '*', '.', '<']

I have noticed that if I type self::, then ST will already show the AC at self:. Since self:: is scoped greedily as punctuation.accessor, you can add an auto_complete_selector in LSP-intelephense.sublime-settings:

"auto_complete_selector": "punctuation.accessor"

This likely misses out on other trigger position though. I am not familiar enough with the PHP language to understand for example in what scope you want to trigger the > character or the * character. Maybe you can improve this.

How to use code folding premium feature?

I have a license and I'd like to use Code folding feature, but cannot find where to set it. Namely I want to have use declarations folded when I open a file.

Not indexing .inc files

I'm using Drupal which has certain .inc files in core, I have set up sublime to always open .inc extensions as PHP files but the intelephense is returning functions defined in .inc files as undefined. If I open the .inc file manually then intelephense works as expected.

Is there any way of fixing this? The vscode intelephense extension works correctly, the only settings that I needed to add is the files.associations setting (which is the same as sublime open as setting).

"generate docblock" quick action not working anymore

I am not sure whether this is an issue with this sublime plugin, or maybe with intelephense itself. But I used to see a "quick fix" code action "generate docblock" when I hover over a (class) function. It is not there anymore, since some time (not sure how long).

For the rest Intelephense is working like it should. I do see other quick code actions, like import symbol when hovering over a class name without import statement.

I am using the licensed version of intelephense (latest version). Plugin version 1.0.30, Sublime Text build 4143.

Anyone else experiencing the same issue?

Template format

Using LSP-json I obtain a default template for function phpdoc:

    "intelephense.phpdoc.functionTemplate": {
          "summary": "${1:$SYMBOL_NAME}",
	         "tags": [
		        "@param ${1:$SYMBOL_TYPE} $SYMBOL_NAME $2",
			"@return ${1:$SYMBOL_TYPE} $2",
			"@throws ${1:$SYMBOL_TYPE} $2"
		]
	}

But I obtain this:

    /**
     * @param   
     * @return  
     */
    private function getPagePoolFeaturesAsArrayOfSlugs(array $page)

I've tried both "text" and "snippet" in the "intelephense.phpdoc.textFormat" option.

But if i delete my config it works like that:

    /**
     * @param array $page 
     * @return array 
     */
    private function getPagePoolFeaturesAsArrayOfSlugs(array $page)

So I think that the problem is the format of the template. How could I get the correct format to use?

Registering request handler for workspace/didChangeWorkspaceFolders failed

I can see the following warning message logged in the LSP Log Panel. The plugin is working fine for me, in spite of the warning.

lsp-intelephense: Registering request handler for workspace/didChangeWorkspaceFolders failed.
lsp-intelephense: (node:96879) UnhandledPromiseRejectionWarning: Error: client/registerCapability
lsp-intelephense: at /Users/joyce/Library/Application Support/Sublime Text 3/Cache/LSP-intelephense/intelephense/node_modules/intelephense/lib/intelephense.js:59:146893
lsp-intelephense: at /Users/joyce/Library/Application Support/Sublime Text 3/Cache/LSP-intelephense/intelephense/node_modules/intelephense/lib/intelephense.js:59:147187
lsp-intelephense: at Immediate.<anonymous> (/Users/joyce/Library/Application Support/Sublime Text 3/Cache/LSP-intelephense/intelephense/node_modules/intelephense/lib/intelephense.js:59:147548)
lsp-intelephense: at processImmediate (internal/timers.js:456:21)
lsp-intelephense: (node:96879) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
lsp-intelephense: (node:96879) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

I found a similar issue on sublimelsp/LSP-eslint#13

My configuration is

{
	"enabled": true,
	"languages": [
		{
			"languageId": "php",
			"scopes": ["source.php"],
			"syntaxes": [
				"Packages/PHP/PHP.sublime-syntax",
			],
		},
	],
	"initializationOptions":
	{
		"clearCache": true,
		"globalStoragePath": "/private/tmp/intelephense",
		"storagePath": "/private/tmp/intelephense",
		"licenceKey": "/Users/joyce/intelephense/license.txt"
	},
	"settings":
	{
		"intelephense":
		{
			"debug":
			{
				"enable": true
			},
			"environment":
			{
				"documentRoot": "/private/var/www/vhosts/prokerala.com/public_html",
				"phpVersion": "7.4.4"
			},
			"diagnostics":
			{
				"undefinedConstants": true,
				"undefinedFunctions": true,
				"undefinedSymbols": true
			},
			"files":
			{
				"associations": [
					"*.php"
				],
				"exclude": [
					"**/.git/**",
					"**/.svn/**",
					"**/.hg/**",
					"**/CVS/**",
					"**/.DS_Store/**",
					"**/node_modules/**",
					"**/bower_components/**",
					"**/vendor/**/{Tests,tests}/**",
					"**/composer/**/{Tests,tests}/**",
					"**/update-db/**",
					"**/.data/**",
					"/framework/**",
					"**/vendor/**/{Example,example,Examples,examples}/**",
					"**/composer/**/{Example,example,Examples,examples}/**",
					"**/composer/composer/**"
				]
			},
			"trace":
			{
				"server": "verbose"
			}
		}
	}
}

How to apply Intelephense configurations?

Hello,
Thanks for this plugin, it makes setting up LSP very easy!

I can't apply any intelephense configurations.
I'm looking to add the redis stub to my configuration, but I can't figure out how to make it work.
I'm using the documentation here regarding stubs:
https://github.com/bmewburn/intelephense-docs/blob/master/gettingStarted.md

And my Preferences > Package Settings > LSP > Servers > LSP-intelephense looks like this:

{
    "intelephense.stubs": {
        "type": "array",
        "items": {
            "type": "string",
            "enum": [
                "redis"
            ]
        }
    },
    "scope": "window"
}

But it doesn't work as I still get Undefined Type: 'Redis' errors on new \Redis();
Thanks very much

Failed to install the server

I have a strange issue with activating this plugin. I have a typescript and tailwindcss LSP and they work great. Unfirtunately Intelephense did not.

Failed to start LSP-intelephense - disabling for this window for the duration of the current session.
Re-enable by running "LSP: Enable Language Server In Project" from the Command Palette.

--- Error: ---
Error installing the server:
Failed to run npm command "/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/bin/node /Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/lib/node_modules/npm/bin/npm-cli.js ci --scripts-prepend-node-path=true --verbose --production":
npm verb cli [
npm verb cli   '/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/bin/node',
npm verb cli   '/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/lib/node_modules/npm/bin/npm-cli.js',
npm verb cli   'ci',
npm verb cli   '--scripts-prepend-node-path=true',
npm verb cli   '--verbose',
npm verb cli   '--production'
npm verb cli ]
npm info using [email protected]
npm info using [email protected]
npm timing npm:load:whichnode Completed in 0ms
npm timing config:load:defaults Completed in 0ms
npm timing config:load:file:/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/lib/node_modules/npm/npmrc Completed in 0ms
npm timing config:load:builtin Completed in 1ms
npm verb config production Use `--omit=dev` instead.
npm timing config:load:cli Completed in 0ms
npm timing config:load:env Completed in 0ms
npm timing config:load:file:/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/LSP-intelephense/16.2.0/language-server/.npmrc Completed in 0ms
npm timing config:load:project Completed in 0ms
npm timing config:load:file:/Users/adrianwiderski/.npmrc Completed in 0ms
npm timing config:load:user Completed in 0ms
npm timing config:load:file:/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/etc/npmrc Completed in 0ms
npm timing config:load:global Completed in 0ms
npm timing config:load:validate Completed in 0ms
npm timing config:load:credentials Completed in 0ms
npm timing config:load:setEnvs Completed in 1ms
npm timing config:load Completed in 3ms
npm timing npm:load:configload Completed in 3ms
npm timing npm:load:setTitle Completed in 4ms
npm timing npm:load:setupLog Completed in 1ms
npm timing npm:load:cleanupLog Completed in 1ms
npm timing npm:load:configScope Completed in 0ms
npm timing npm:load:projectScope Completed in 1ms
npm timing npm:load Completed in 11ms
npm timing config:load:flatten Completed in 1ms
npm timing arborist:ctor Completed in 0ms
npm timing npm-ci:rm Completed in 1ms
npm timing idealTree:init Completed in 1ms
npm timing idealTree:userRequests Completed in 0ms
npm timing idealTree:#root Completed in 0ms
npm timing idealTree:buildDeps Completed in 0ms
npm timing idealTree:fixDepFlags Completed in 0ms
npm timing idealTree Completed in 2ms
npm timing reify:loadTrees Completed in 4ms
npm timing reify:diffTrees Completed in 1ms
npm timing reify:retireShallow Completed in 0ms
npm timing reify:createSparse Completed in 9ms
npm timing reify:trashOmits Completed in 0ms
npm timing reify:loadBundles Completed in 0ms
npm timing reifyNode:node_modules/wrappy Completed in 528ms
npm timing reifyNode:node_modules/universalify Completed in 529ms
npm timing reifyNode:node_modules/run-parallel Completed in 528ms
npm timing reifyNode:node_modules/path-is-absolute Completed in 529ms
npm timing reifyNode:node_modules/oauth-sign Completed in 529ms
npm timing reifyNode:node_modules/once Completed in 529ms
npm timing reifyNode:node_modules/merge2 Completed in 529ms
npm timing reifyNode:node_modules/is-extglob Completed in 530ms
npm timing reifyNode:node_modules/inflight Completed in 529ms
npm timing reifyNode:node_modules/is-glob Completed in 531ms
npm timing reifyNode:node_modules/ini Completed in 530ms
npm timing reifyNode:node_modules/is-number Completed in 531ms
npm timing reifyNode:node_modules/brace-expansion Completed in 531ms
npm timing reifyNode:node_modules/abbrev Completed in 532ms
npm timing reifyNode:node_modules/at-least-node Completed in 532ms
npm timing reifyNode:node_modules/@types/long Completed in 532ms
npm timing reifyNode:node_modules/tunnel-agent Completed in 536ms
npm timing reifyNode:node_modules/to-regex-range Completed in 536ms
npm timing reifyNode:node_modules/queue-microtask Completed in 535ms
npm timing reifyNode:node_modules/lru-cache Completed in 535ms
npm timing reifyNode:node_modules/is-typedarray Completed in 536ms
npm timing reifyNode:node_modules/inherits Completed in 535ms
npm timing reifyNode:node_modules/glob-parent Completed in 535ms
npm timing reifyNode:node_modules/fill-range Completed in 535ms
npm timing reifyNode:node_modules/forever-agent Completed in 535ms
npm timing reifyNode:node_modules/editorconfig/node_modules/lru-cache Completed in 536ms
npm timing reifyNode:node_modules/caseless Completed in 535ms
npm timing reifyNode:node_modules/config-chain Completed in 535ms
npm timing reifyNode:node_modules/aws-sign2 Completed in 536ms
npm timing reifyNode:node_modules/assert-plus Completed in 536ms
npm timing reifyNode:node_modules/yallist Completed in 540ms
npm timing reifyNode:node_modules/proto-list Completed in 539ms
npm timing reifyNode:node_modules/minimatch Completed in 540ms
npm timing reifyNode:node_modules/lru-cache/node_modules/yallist Completed in 540ms
npm timing reifyNode:node_modules/fs.realpath Completed in 539ms
npm timing reifyNode:node_modules/emitter-listener Completed in 539ms
npm timing reifyNode:node_modules/combined-stream Completed in 540ms
npm timing reifyNode:node_modules/balanced-match Completed in 540ms
npm timing reifyNode:node_modules/pseudomap Completed in 543ms
npm timing reifyNode:node_modules/mime-types Completed in 543ms
npm timing reifyNode:node_modules/micromatch Completed in 544ms
npm WARN deprecated [email protected]: this library is no longer supported
npm timing reifyNode:node_modules/har-validator Completed in 543ms
npm timing reifyNode:node_modules/getpass Completed in 543ms
npm timing reifyNode:node_modules/domelementtype Completed in 542ms
npm timing reifyNode:node_modules/delayed-stream Completed in 543ms
npm timing reifyNode:node_modules/@protobufjs/path Completed in 542ms
npm timing reifyNode:node_modules/@protobufjs/eventemitter Completed in 542ms
npm timing reifyNode:node_modules/@protobufjs/codegen Completed in 543ms
npm timing reifyNode:node_modules/@protobufjs/aspromise Completed in 543ms
npm timing reifyNode:node_modules/@protobufjs/base64 Completed in 543ms
npm timing reifyNode:node_modules/@protobufjs/fetch Completed in 543ms
npm timing reifyNode:node_modules/sigmund Completed in 548ms
npm timing reifyNode:node_modules/punycode Completed in 548ms
npm timing reifyNode:node_modules/safe-buffer Completed in 549ms
npm timing reifyNode:node_modules/jsonfile Completed in 548ms
npm timing reifyNode:node_modules/json-schema Completed in 548ms
npm timing reifyNode:node_modules/graceful-fs Completed in 548ms
npm timing reifyNode:node_modules/bcrypt-pbkdf Completed in 547ms
npm timing reifyNode:node_modules/@protobufjs/pool Completed in 548ms
npm timing reifyNode:node_modules/core-util-is Completed in 550ms
npm timing reifyNode:node_modules/concat-map Completed in 550ms
npm timing reifyNode:node_modules/safer-buffer Completed in 556ms
npm timing reifyNode:node_modules/nopt Completed in 555ms
npm timing reifyNode:node_modules/jsprim Completed in 555ms
npm timing reifyNode:node_modules/isstream Completed in 556ms
npm timing reifyNode:node_modules/extend Completed in 555ms
npm timing reifyNode:node_modules/dom-serializer Completed in 554ms
npm timing reifyNode:node_modules/aws4 Completed in 555ms
npm timing reifyNode:node_modules/@bmewburn/turndown-plugin-gfm Completed in 554ms
npm timing reifyNode:node_modules/verror Completed in 559ms
npm timing reifyNode:node_modules/reusify Completed in 558ms
npm timing reifyNode:node_modules/jsbn Completed in 558ms
npm timing reifyNode:node_modules/editorconfig/node_modules/semver Completed in 557ms
npm timing reifyNode:node_modules/diagnostic-channel/node_modules/semver Completed in 557ms
npm timing reifyNode:node_modules/diagnostic-channel Completed in 557ms
npm timing reifyNode:node_modules/cls-hooked/node_modules/semver Completed in 557ms
npm timing reifyNode:node_modules/cls-hooked Completed in 557ms
npm timing reifyNode:node_modules/async-listener/node_modules/semver Completed in 557ms
npm timing reifyNode:node_modules/@protobufjs/utf8 Completed in 557ms
npm timing reifyNode:node_modules/json-stringify-safe Completed in 560ms
npm timing reifyNode:node_modules/glob Completed in 559ms
npm timing reifyNode:node_modules/extsprintf Completed in 560ms
npm timing reifyNode:node_modules/domhandler Completed in 560ms
npm timing reifyNode:node_modules/domutils/node_modules/domhandler Completed in 561ms
npm timing reifyNode:node_modules/dom-serializer/node_modules/domhandler Completed in 560ms
npm timing reifyNode:node_modules/ecc-jsbn Completed in 561ms
npm timing reifyNode:node_modules/commander Completed in 560ms
npm timing reifyNode:node_modules/@protobufjs/float Completed in 559ms
npm timing reifyNode:node_modules/shimmer Completed in 564ms
npm timing reifyNode:node_modules/json-schema-traverse Completed in 563ms
npm timing reifyNode:node_modules/@protobufjs/inquire Completed in 562ms
npm timing reifyNode:node_modules/asn1 Completed in 563ms
npm timing reifyNode:node_modules/mkdirp Completed in 566ms
npm timing reifyNode:node_modules/fast-deep-equal Completed in 566ms
npm timing reifyNode:node_modules/deepmerge Completed in 565ms
npm timing reifyNode:node_modules/dashdash Completed in 567ms
npm timing reifyNode:node_modules/he Completed in 570ms
npm timing reifyNode:node_modules/braces Completed in 569ms
npm timing reifyNode:node_modules/tough-cookie Completed in 573ms
npm timing reifyNode:node_modules/picomatch Completed in 574ms
npm timing reifyNode:node_modules/form-data Completed in 575ms
npm timing reifyNode:node_modules/fastq Completed in 575ms
npm timing reifyNode:node_modules/http-signature Completed in 575ms
npm timing reifyNode:node_modules/vscode-languageserver-textdocument Completed in 578ms
npm timing reifyNode:node_modules/mime-db Completed in 577ms
npm timing reifyNode:node_modules/editorconfig Completed in 577ms
npm timing reifyNode:node_modules/performance-now Completed in 579ms
npm timing reifyNode:node_modules/asynckit Completed in 578ms
npm timing reifyNode:node_modules/@bmewburn/vscode-html-languageserver/node_modules/vscode-uri Completed in 577ms
npm timing reifyNode:node_modules/long Completed in 582ms
npm timing reifyNode:node_modules/fast-json-stable-stringify Completed in 581ms
npm WARN deprecated [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm timing reifyNode:node_modules/uuid Completed in 587ms
npm timing reifyNode:node_modules/@bmewburn/minidom Completed in 584ms
npm timing reifyNode:node_modules/tweetnacl Completed in 588ms
npm timing reifyNode:node_modules/minimist Completed in 587ms
npm timing reifyNode:node_modules/har-schema Completed in 587ms
npm timing reifyNode:node_modules/@bmewburn/turndown Completed in 592ms
npm timing reifyNode:node_modules/entities Completed in 596ms
npm timing reifyNode:node_modules/stack-chain Completed in 599ms
npm timing reifyNode:node_modules/vscode-uri Completed in 600ms
npm timing reifyNode:node_modules/domutils Completed in 600ms
npm timing reifyNode:node_modules/diagnostic-channel-publishers Completed in 599ms
npm timing reifyNode:node_modules/vscode-css-languageservice/node_modules/vscode-languageserver-types Completed in 603ms
npm timing reifyNode:node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types Completed in 603ms
npm timing reifyNode:node_modules/vscode-html-languageservice/node_modules/vscode-languageserver-types Completed in 603ms
npm timing reifyNode:node_modules/@bmewburn/vscode-html-languageserver/node_modules/vscode-languageserver-types Completed in 599ms
npm timing reifyNode:node_modules/qs Completed in 603ms
npm timing reifyNode:node_modules/htmlparser2 Completed in 602ms
npm timing reifyNode:node_modules/vscode-languageserver-types Completed in 605ms
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm timing reifyNode:node_modules/request Completed in 605ms
npm timing reifyNode:node_modules/continuation-local-storage Completed in 604ms
npm timing reifyNode:node_modules/vscode-nls Completed in 608ms
npm timing reifyNode:node_modules/psl Completed in 608ms
npm timing reifyNode:node_modules/html-to-text Completed in 614ms
npm timing reifyNode:node_modules/async-listener Completed in 631ms
npm timing reifyNode:node_modules/semver Completed in 634ms
npm timing reifyNode:node_modules/async-hook-jl Completed in 635ms
npm timing reifyNode:node_modules/vscode-jsonrpc Completed in 638ms
npm timing reifyNode:node_modules/fs-extra Completed in 636ms
npm timing reifyNode:node_modules/sshpk Completed in 640ms
npm timing reifyNode:node_modules/vscode-languageserver Completed in 640ms
npm timing reifyNode:node_modules/vscode-languageserver/node_modules/vscode-jsonrpc Completed in 641ms
npm timing reifyNode:node_modules/@bmewburn/vscode-html-languageserver/node_modules/vscode-languageserver Completed in 638ms
npm timing reifyNode:node_modules/@nodelib/fs.stat Completed in 640ms
npm timing reifyNode:node_modules/parse5 Completed in 644ms
npm timing reifyNode:node_modules/fast-glob Completed in 646ms
npm timing reifyNode:node_modules/uri-js Completed in 652ms
npm timing reifyNode:node_modules/vscode-languageserver/node_modules/vscode-languageserver-protocol Completed in 652ms
npm timing reifyNode:node_modules/vscode-languageserver-protocol Completed in 652ms
npm timing reifyNode:node_modules/@nodelib/fs.scandir Completed in 653ms
npm timing reifyNode:node_modules/@types/node Completed in 657ms
npm timing reifyNode:node_modules/@nodelib/fs.walk Completed in 661ms
npm timing reifyNode:node_modules/@bmewburn/js-beautify Completed in 666ms
npm timing reifyNode:node_modules/ajv Completed in 674ms
npm timing reifyNode:node_modules/vscode-html-languageservice Completed in 690ms
npm timing reifyNode:node_modules/@bmewburn/vscode-html-languageserver Completed in 689ms
npm timing reifyNode:node_modules/vscode-css-languageservice Completed in 706ms
npm timing reifyNode:node_modules/protobufjs Completed in 711ms
npm timing reifyNode:node_modules/applicationinsights Completed in 714ms
npm http fetch POST 200 https://registry.npmjs.org/-/npm/v1/security/advisories/bulk 733ms
npm timing auditReport:getReport Completed in 735ms
npm timing auditReport:init Completed in 0ms
npm timing reify:audit Completed in 735ms
npm timing reifyNode:node_modules/lodash Completed in 769ms
npm timing reifyNode:node_modules/intelephense Completed in 819ms
npm timing reifyNode:node_modules/typescript Completed in 849ms
npm timing reify:unpack Completed in 849ms
npm timing reify:unretire Completed in 0ms
npm timing build:queue Completed in 1ms
npm timing build:link:node_modules/@bmewburn/vscode-html-languageserver/node_modules/vscode-languageserver Completed in 2ms
npm timing build:link:node_modules/cls-hooked/node_modules/semver Completed in 2ms
npm timing build:link:node_modules/he Completed in 2ms
npm timing build:link:node_modules/editorconfig Completed in 2ms
npm timing build:link:node_modules/editorconfig/node_modules/semver Completed in 2ms
npm timing build:link:node_modules/html-to-text Completed in 2ms
npm timing build:link:node_modules/@bmewburn/js-beautify Completed in 3ms
npm timing build:link:node_modules/nopt Completed in 2ms
npm timing build:link:node_modules/intelephense Completed in 2ms
npm timing build:link:node_modules/semver Completed in 2ms
npm timing build:link:node_modules/protobufjs Completed in 2ms
npm timing build:link:node_modules/async-listener/node_modules/semver Completed in 2ms
npm timing build:link:node_modules/sshpk Completed in 2ms
npm timing build:link:node_modules/typescript Completed in 2ms
npm timing build:link:node_modules/mkdirp Completed in 2ms
npm timing build:link:node_modules/uuid Completed in 2ms
npm timing build:link:node_modules/vscode-languageserver Completed in 2ms
npm timing build:link:node_modules/diagnostic-channel/node_modules/semver Completed in 2ms
npm timing build:link Completed in 3ms
npm info run [email protected] postinstall node_modules/protobufjs node scripts/postinstall
npm info run [email protected] postinstall { code: 127, signal: null }
npm timing reify:rollback:createSparse Completed in 269ms
npm timing reify:rollback:retireShallow Completed in 0ms
npm timing command:ci Completed in 1187ms
npm verb stack Error: command failed
npm verb stack     at ChildProcess.<anonymous> (/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/index.js:64:27)
npm verb stack     at ChildProcess.emit (node:events:365:28)
npm verb stack     at maybeClose (node:internal/child_process:1067:16)
npm verb stack     at Socket.<anonymous> (node:internal/child_process:453:11)
npm verb stack     at Socket.emit (node:events:365:28)
npm verb stack     at Pipe.<anonymous> (node:net:661:12)
npm verb pkgid [email protected]
npm verb cwd /Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/LSP-intelephense/16.2.0/language-server
npm verb Darwin 21.2.0
npm verb argv "/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/bin/node" "/Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/lsp_utils/node-runtime/16.2.0/node/lib/node_modules/npm/bin/npm-cli.js" "ci" "--scripts-prepend-node-path=true" "--verbose" "--production"
npm verb node v16.2.0
npm verb npm  v7.13.0
npm ERR! code 127
npm ERR! path /Users/adrianwiderski/Library/Caches/Sublime Text/Package Storage/LSP-intelephense/16.2.0/language-server/node_modules/protobufjs
npm ERR! command failed
npm ERR! command sh -c node scripts/postinstall
npm ERR! sh: node: command not found
npm verb exit 127
npm timing npm Completed in 1311ms
npm verb code 127

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/adrianwiderski/.npm/_logs/2021-12-23T06_35_32_978Z-debug.log
❯ node -v
v16.9.1
                                                                                                                                                                                                                            
~   
❯ npm -v
7.21.1

Intelephense premium features

Hello, is this package support the premium features of Intelephense?

If not, do you have any plan to implement premium features in the near future?

Error during activation of LSP-intelephense on Windows 11 in ST4

I can install the package without a problem in Sublime Text 4, but when it gets activated, it fails due to not being able to find the node executable. See attached error log. This seems to be a Windows specific problem, at least I had no issue on Linux so far.

I was able to solve this by installing lsp_utils before installing LSP-intelephense. This should either be fixed or prominently documented.

2023-10-27T19_23_35_264Z-debug-0.log

licence key file created in each indexed folder

I put "$licenceKey": "${packages}/User/intelephense-license.txt"  as setting (in "initializationOptions": {…} ) but LSP-intelephense still create a folder ~\.intelephense\intelephense_license_key_XXXX in each indexed folder as soon as open a PHP file in them.

Is there any option to avoid this behavior?

PS: The intelephense-license.txt has been created in ${packages}/User folder and contains my license key.

global name 'path' is not defined

hello.

in the last few days, the package keep complaining about global name 'path' is not defined.
i am not pretty sure how this happen.

image

sublime console

Unable to start subprocess for LSP-intelephense
Traceback (most recent call last):
  File "C:\Users\JMC002\AppData\Roaming\Sublime Text 3\Installed Packages\LSP.sublime-package\plugin/core/windows.py", line 324, in start_async
    cwd = plugin_class.on_pre_start(self._window, initiating_view, workspace_folders, config)
  File "C:\Users\JMC002\AppData\Roaming\SUBLIM~1\Packages\LSP_UT~1\st3\lsp_utils\_client_handler\abstract_plugin.py", line 130, in on_pre_start
    extra_paths = path.pathsep.join(cls.get_additional_paths())
NameError: global name 'path' is not defined

(sorry forr my english)

Index not working on workspace

I have a workspace with two folders:

project > folder1 and project > folder2

These two folders were added in a new project.

Some PHP source in folder2 use classes and methods defined in folder1 but intelephense says that these classes/methods are unknonw.

Why ?

Is there any option to have an index on the entire project (ie all sources in every folders added to the project)?

ST is able to give references all other the workspace but using LSP-intelephense remove the ST reference popup and replace it by its own, so I don't know how to fix this.

Error enabling LSP-intelephense

Heyo, thanks for this port first of all! It's fantastic when it's working.

I'm running Linux Mint 20 with Sublime Text version 4107

But after having ran it for several days with no issues, now whenever I try and enable it with I get the error global name 'path' is not defined. I've attempting to google around for this error with just intelephense on it's own and haven't been able to find anything. I think it's related to this extension. I thought to open the consoles and see this output:

Unable to start subprocess for LSP-intelephense
Traceback (most recent call last):
  File "/home/zzz/.config/sublime-text-3/Installed Packages/LSP.sublime-package/plugin/core/windows.py", line 324, in start_async
    cwd = plugin_class.on_pre_start(self._window, initiating_view, workspace_folders, config)
  File "/home/zzz/.config/sublime-text-3/Packages/lsp_utils/st3/lsp_utils/_client_handler/abstract_plugin.py", line 130, in on_pre_start
    workspace_folders: List[WorkspaceFolder], configuration: ClientConfig) -> Optional[str]:
NameError: global name 'path' is not defined

Not sure what I did or changed for this to start happening, but any help would be greatly appreciated.

Handle the indexingStarted and indexingStopped notifications

I see these unhandled notifications in the logs:

:: --> intelephense-ls initialize(1): {'rootPath': '/home/raoul/.config/sublime-text-3/Packages/LSP', 'capabilities': {'textDocument': {'codeAction': {'codeActionLiteralSupport': {'codeActionKind': {'valueSet': []}}}, 'definition': {'linkSupport': True}, 'signatureHelp': {'signatureInformation': {'documentationFormat': ['markdown', 'plaintext'], 'parameterInformation': {'labelOffsetSupport': True}}}, 'hover': {'contentFormat': ['markdown', 'plaintext']}, 'synchronization': {'willSaveWaitUntil': True, 'didSave': True}, 'rename': {}, 'formatting': {}, 'implementation': {'linkSupport': True}, 'rangeFormatting': {}, 'documentHighlight': {}, 'references': {}, 'typeDefinition': {'linkSupport': True}, 'documentSymbol': {'symbolKind': {'valueSet': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]}}, 'completion': {'completionItemKind': {'valueSet': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]}, 'completionItem': {'snippetSupport': True}}, 'publishDiagnostics': {'relatedInformation': True}, 'colorProvider': {}, 'declaration': {'linkSupport': True}}, 'workspace': {'applyEdit': True, 'executeCommand': {}, 'symbol': {'symbolKind': {'valueSet': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]}}, 'configuration': True, 'didChangeConfiguration': {}, 'workspaceFolders': True}}, 'initializationOptions': {'storagePath': '/tmp/intelephense-ls'}, 'rootUri': 'file:///home/raoul/.config/sublime-text-3/Packages/LSP', 'processId': 18820, 'workspaceFolders': [{'uri': 'file:///home/raoul/.config/sublime-text-3/Packages/LSP', 'name': 'LSP'}, {'uri': 'file:///home/raoul/.config/sublime-text-3/Packages/User', 'name': 'User'}, {'uri': 'file:///home/raoul/.config/sublime-text-3/Packages/UnitTesting', 'name': 'UnitTesting'}, {'uri': 'file:///home/raoul/Documents/Programming/tonic', 'name': 'tonic'}, {'uri': 'file:///home/raoul/Documents/Programming/RigelEngine', 'name': 'RigelEngine'}]}
intelephense-ls: Initialising
intelephense-ls: Reading state from /tmp/intelephense-ls/4fa08a3a.
intelephense-ls: Initialised in 114 ms
intelephense-ls: Indexing started.
intelephense-ls: Indexing ended. Elapsed 0s.
intelephense-ls: Indexed 1 files. Writing state to /tmp/intelephense-ls/4fa08a3a.
:: <-- intelephense-ls 1: {'capabilities': {'documentRangeFormattingProvider': False, 'definitionProvider': True, 'hoverProvider': True, 'documentHighlightProvider': True, 'workspaceSymbolProvider': True, 'textDocumentSync': 2, 'referencesProvider': True, 'signatureHelpProvider': {'triggerCharacters': ['(', ',']}, 'completionProvider': {'triggerCharacters': ['$', '>', ':', '\\', '.', '<', '/'], 'resolveProvider': True}, 'documentSymbolProvider': True}}
:: --> intelephense-ls initialized: {}
:: --> intelephense-ls textDocument/didOpen
:: unhandled intelephense-ls client/registerCapability(0): {'registrations': [{'id': '853d3eb0-6c8b-4d7a-bc1a-c28810e2dbfd', 'method': 'workspace/didChangeWorkspaceFolders', 'registerOptions': {}}]}
:: <-- intelephense-ls workspace/configuration(1): {'items': [{'section': 'intelephense'}]}
:: --> intelephense-ls 1: [{}]
:: unhandled intelephense-ls client/registerCapability(2): {'registrations': [{'id': '22a9c236-b6cc-40b0-a6fb-61d065605d4e', 'method': 'textDocument/rangeFormatting', 'registerOptions': {'documentSelector': [{'scheme': 'file', 'language': 'php'}, {'scheme': 'untitled', 'language': 'php'}]}}]}
:: unhandled intelephense-ls indexingStarted: None
:: unhandled intelephense-ls indexingEnded: None
:: --> intelephense-ls textDocument/hover(2): {'textDocument': {'uri': 'file:///home/raoul/.config/sublime-text-3/Packages/LSP/tests/testfile.html'}, 'position': {'line': 7, 'character': 20}}
:: <-- intelephense-ls 2: None

Core stubs not deep merged when also filled in user settings

When filling settings.intelephense.stubs to add custom stubs like "wordpress", the setting is completely overriden instead of deep merged which makes intelephense complain about core PHP functions among others.

This is the extension settings

{
	"languages": [
		{
			"languageId": "php",
			// ST3 configuration
			"scopes": [
				"source.php"
			],
			"syntaxes": [
				"Packages/PHP/PHP.sublime-syntax",
			],
			// ST4 configuration
			"document_selector": "embedding.php",
			"feature_selector": "source.php",
		},
	],
	"schemes": ["file", "buffer"],
	"auto_complete_selector": "punctuation.accessor | punctuation.definition.variable | punctuation.separator.namespace | punctuation.definition.tag.begin",
	"initializationOptions": {
		"clearCache": false,
		// "storagePath": "${temp_dir}/intelephense",
		// "globalStoragePath": "${home}/.intelephense",

		// if you want to use a premium license, you can either paste the key directly
		// or paste it into a file and provide its absolute path here
		// "licenceKey": "${packages}/User/intelephense-license.txt",
	},
	// @see configuration in https://github.com/bmewburn/vscode-intelephense/blob/master/package.json
	"settings": {
		// There are quite a lot of settings for intelephense...
		// For a full list, you can check the link above or just use LSP-json for autocompletion.
		"intelephense.environment.phpVersion": "8.1.0", // temporary fix for intelephense v1.8.0
	},
}

And here is the user settings

// Settings in here override those in "LSP-json/LSP-json.sublime-settings"
{
    "languages": [
        {
            "languageId": "php",
            // ST3 configuration
            "scopes": ["source.php","source.blade"],
            "syntaxes": [
                "Packages/PHP/PHP.sublime-syntax",
                "Packages/Laravel Blade Highlighter/blade.sublime-syntax"
            ],
            // ST4 configuration
            "document_selector": ["embedding.php", "embedding.blade"],
            "feature_selector": ["source.php", "source.blade"]
        },
    ],
    "auto_complete_selector": "punctuation.accessor | punctuation.definition.variable | punctuation.separator.namespace | punctuation.definition.tag.begin",
    "initializationOptions": {
        "clearCache": false,
    //     // "storagePath": "${temp_dir}/intelephense",
    //     // "globalStoragePath": "${home}/.intelephense",

    //     // if you want to use a premium license, you can either paste the key directly
    //     // or paste it into a file and provide its absolute path here
    //     // "licenceKey": "${packages}/User/intelephense-license.txt",
    },
    // @see configuration in https://github.com/bmewburn/vscode-intelephense/blob/master/package.json
    "settings": {
        // There are quite a lot of settings for intelephense...
        // For a full list, you can check the link above or just use LSP-json for autocompletion.
        "intelephense.stubs": [
            "wordpress"
        ]
    },
}

To fix it, I had to re-add the default stubs from the vscode definition

"apache",
"bcmath",
"bz2",
"calendar",
"com_dotnet",
"Core",
"ctype",
"curl",
"date",
"dba",
"dom",
"enchant",
"exif",
"FFI",
"fileinfo",
"filter",
"fpm",
"ftp",
"gd",
"gettext",
"gmp",
"hash",
"iconv",
"imap",
"intl",
"json",
"ldap",
"libxml",
"mbstring",
"meta",
"mysqli",
"oci8",
"odbc",
"openssl",
"pcntl",
"pcre",
"PDO",
"pdo_ibm",
"pdo_mysql",
"pdo_pgsql",
"pdo_sqlite",
"pgsql",
"Phar",
"posix",
"pspell",
"readline",
"Reflection",
"session",
"shmop",
"SimpleXML",
"snmp",
"soap",
"sockets",
"sodium",
"SPL",
"sqlite3",
"standard",
"superglobals",
"sysvmsg",
"sysvsem",
"sysvshm",
"tidy",
"tokenizer",
"xml",
"xmlreader",
"xmlrpc",
"xmlwriter",
"xsl",
"Zend OPcache",
"zip",
"zlib"

Marking files with errors as red in the files tree?

I'm not sure if this feature already exists and can be enabled through configuration but it would be nice if the file having errors would be marked red in the files tree, something like what VS Code does so it would be easy to track the file without having to go through each file to see where the problem lies.

From VS Code
Screenshot 2024-02-19 at 12 20 46 PM

Sublime
Screenshot 2024-02-19 at 12 16 47 PM

Does not start automatically on Sublime 4

In the early versions of Sublime 4, LSP-intelephense would start automatically when I booted up my project, but now I can't find a way to restart it / enable it and it does not automatically, since a few updates of Sublime 4 ago.

Also, LSP-intelephense is not showing in the "Enable language server globally" and the only way I found to force it's reinitialization is to open the settings files and save it. I don't know what it's trigerring but I'd love to find a way to make it work again.

PHP tag formatted wrong inside HTML script tags

When I try to inject a PHP variable inside inline JS code (inside a <script> block) the code formatter formats this:

image

As such:

image

i.e. it adds a space betweeh the "<?" and the "php" of the open php tag - which results in a JS error. This does not happen if the whole PHP block is wrapped in quotes (treated as string):

image

Code to test with (test.php file):

<div>
	<?php $accordion_count = 10; ?>
</div>
<script>
	window.accordion_count = <?php echo $accordion_count; ?>;
	window.accordion_count = "<?php echo $accordion_count; ?>";
	window.accordion_count = parseInt("<?php echo $accordion_count; ?>");
</script>

If you try to format this code you will notice the issue in the first of the three JS variable lines.

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.