Commit Graph

94 Commits

Author SHA1 Message Date
Thiago de Arruda
cac24cb06d api/msgpack-rpc: Refactor msgpack_rpc_helpers.{c,h}
- Move helpers that are specific to API types to api/private/helpers.{c,h}
- Include headers with generated declarations
- Delete unused macros
2014-09-12 13:25:28 -03:00
Thiago de Arruda
2f566c83d9 api/msgpack-rpc: Parse type information from api/private/defs.h
Enhance msgpack-gen.lua to extract custom api type codes from the ObjectType
enum in api/private/defs.h. The type information is made available from the api
metadata and clients can use to correctly serialize/deserialize these types
using msgpack EXT type.
2014-09-12 13:25:28 -03:00
Thiago de Arruda
d5e3cede28 msgpack-rpc: Remove support for integer ids in methods
There's no need to have integer and string ids, and since we now fully support
msgpack-RPC, support for integer ids was removed.
2014-09-12 13:25:28 -03:00
Thiago de Arruda
cd70b9c015 msgpack-rpc: Refactor API metadata discovery method
A new method is now exposed via msgpack-rpc: "get_api_metadata". This method has
the same job as the old method '0', it returns an object with API metadata for
use by generators.

There's one difference in the return value though: instead of returning a
string containing another serialized msgpack document, the metadata object is
returned directly(a separate deserialization step by clients is not required).
2014-09-12 13:25:28 -03:00
Thiago de Arruda
19bc29ee83 msgpack-rpc: Move handle_missing_method to msgpack_rpc.c
Since that function is not automatically generated, it's best to place it in a
normal C module
2014-09-12 13:25:28 -03:00
Thiago de Arruda
74aff19691 msgpack-rpc: Refactor initializer and dispatcher
Use Map(String, rpc_method_handler_fn) for storing/retrieving rpc method
handlers in msgpack_rpc_init and msgpack_rpc_dispatch.

Also refactor serialization/validation functions in the
msgpack_rpc.c/msgpack_rpc_helpers.c modules to accept the new STR and BIN types.
2014-09-12 13:25:28 -03:00
Thiago de Arruda
c39ae3e4d4 map/msgpack-rpc: Declare/define maps rpc method handlers
The new map type uses `String` instances as keys to avoid unnecessary copying to
zero-terminated buffers.
2014-09-12 13:25:28 -03:00
Thiago de Arruda
e2143674ae deps: Update to the experimental msgpack v5 branch
Using msgpack v5 will let nvim be more compatible with msgpack libraries for
other platforms.

This also replaces "raw" references by "bin" which is the new name for msgpack
binary data type
2014-09-12 13:19:50 -03:00
Thiago de Arruda
aa23d2f835 msgpack-rpc: Accept method names in requests 2014-08-29 22:08:58 -03:00
Thiago de Arruda
b744073fae test: Remove cleanup function definition from run-api-tests.exp
This function is now injected automatically when running the python-client tests
2014-08-28 14:07:31 -03:00
ZyX
1e11de5385 Fix problem with test47: addition is not bitwise OR
:diffsplit command used to include some flag value twice. If I was using bitwise
OR it would be OK, but I had addition here. Changed to use bitwise OR.
2014-08-20 20:21:37 +04:00
ZyX
b8a32b6603 Add const qualifier and explicit length 2014-08-20 20:21:37 +04:00
ZyX
3becb5fd21 Use lua generator in place of ex_cmds_defs header trick
Closes #788
Fixes #379
Ref #549
2014-08-20 20:21:37 +04:00
Thiago de Arruda
6483a198e4 Travis CI: Refactor travis script
To simplify modification/inclusion of continuous integration targets, this
removes travis.sh which contains a big if statement in favor of multiple scripts
under the new '.ci' directory.
2014-08-08 06:06:10 -04:00
ZyX
1fa3a7d70a Use color_terminal output in place of TAP #995 2014-08-07 02:07:08 -04:00
Florian Walch
f29504a5b8 travis.sh: Update sources before installing packages. 2014-08-06 12:58:38 -03:00
Thiago de Arruda
4dc642aa62 api tests: set 'initpython' in BeforeEachTest
This is required to run some tests of the python client
2014-07-17 11:37:42 -03:00
Thiago de Arruda
cf30837951 api/events/msgpack: Insert log statements to improve debugging
Also changed the default log level to INFO so developers won't end up with big
log files without asking explicitly(DLOG statements were placed in really "hot"
code)
2014-07-17 11:37:41 -03:00
John Szakmeister
1172e25fad travis.sh: move symbolizer definition into common area 2014-07-17 05:30:20 -04:00
Florian Walch
5433694db3 travis.sh: Simplify clang/asan build.
* Clang 3.4 now default on Travis CI.
* Introduce config variable to download & use different clang version.
2014-07-16 06:01:02 -04:00
Florian Walch
2cae6919dc travis.sh: Use dependencies from neovim/deps. 2014-07-16 06:01:02 -04:00
Florian Walch
58e85fca02 travis.sh: Fix mixed tabs/whitespace formatting. 2014-07-16 06:01:02 -04:00
Brandon Coleman
e69cfa6c15 move assert.h include out of vim.h 2014-07-09 00:18:19 +02:00
Thiago de Arruda
745928ef6b dispatch function generator: Fix bug in validation/initialization
- Initialize variables before validating argument count to remove possibility of
  freeing uninitialized pointers
- Set the error when the argument count validation fails
2014-07-07 12:18:39 -03:00
Felipe Oliveira Carvalho
9a2b2d4a64 MsgPack-RPC dispatch based on function array lookup #864
This simplifies the generated msgpack_rpc_dispatch() function, separates the
code for each RPC method more clearly and allows easy implementation of
alternative dispatching methods (e.g. string method id dispatch).
2014-07-04 17:05:24 +00:00
John Szakmeister
b235793dac Fix #838: build with "USE_BUNDLED=OFF" fails to find dependencies
Stop forcing some platform setting that are really intended to be used
for Travis CI.  Under other systems, like Arch Linux, it prevents
dependencies from being correctly located.
2014-06-27 06:52:59 -04:00
Thiago de Arruda
296da85198 channel/msgpack_rpc: Refactor API dispatching
This is how API dispatching worked before this commit:

- The generated `msgpack_rpc_dispatch` function receives a the `msgpack_packer`
  argument.
- The response is incrementally built while validating/calling the API.
- Return values/errors are also packed into the `msgpack_packer` while the
  final response is being calculated.

Now the `msgpack_packer` argument is no longer provided, and the
`msgpack_rpc_dispatch` function returns `Object`/`Error` values to
`msgpack_rpc_call`, which will use those values to build the response in a
single pass.

This was done because the new `channel_send_call` function created the
possibility of having recursive API invocations, and this wasn't possible when
sharing a single `msgpack_sbuffer` across call frames(it was shared implicitly
through the `msgpack_packer` instance).

Since we only start to build the response when the necessary information has
been computed, it's now safe to share a single `msgpack_sbuffer` instance
across all channels and API invocations.

Some other changes also had to be performed:

- Handling of the metadata discover was moved to `msgpack_rpc_call`
- Expose more types as subtypes of `Object`, this was required to forward the
  return value from `msgpack_rpc_dispatch` to `msgpack_rpc_call`
- Added more helper macros for casting API types to `Object`
  any
2014-06-24 13:02:24 -03:00
Thiago de Arruda
bc0380038e channel/msgpack_rpc: Refactor to better split functions across modules
Move validation/conversion functions and to msgpack_rpc_helpers to separate
those from the functions that are used from the channel module
2014-06-24 13:02:24 -03:00
ZyX
b0641510b6 Avoid ever creating .deps directory
Thanks to @jszakmeister this uses make own features.
2014-06-18 16:21:11 -04:00
Thiago de Arruda
72907c34f4 build: increase timeout for run-api-tests.exp 2014-06-18 11:36:07 -03:00
Thiago de Arruda
796ea333d4 build: Fix error in dispatch generator for functions with channel_id 2014-06-18 11:36:07 -03:00
Thiago de Arruda
4b787fb7d1 Make gendeclarations.lua more friendly to incremental builds
Modify gendeclarations.lua to check if the generated non-static declaration
header changed before rewriting it with a new version. This is to prevent
unnecessary rebuilds of modules that depend on modules that had private changes.
2014-06-02 15:53:55 -03:00
ZyX
6498b281fa Remove remaining declarations with new script: finddeclarations.pl 2014-06-02 11:04:18 -03:00
ZyX
70929f7e16 Add automatic generation of headers
- The 'stripdecls.py' script replaces declarations in all headers by includes to
  generated headers.
  `ag '#\s*if(?!ndef NEOVIM_).*((?!#\s*endif).*\n)*#ifdef INCLUDE_GENERATED'`
  was used for this.
- Add and integrate gendeclarations.lua into the build system to generate the
  required includes.
- Add -Wno-unused-function
- Made a bunch of old-style definitions ANSI

This adds a requirement: all type and structure definitions must be present
before INCLUDE_GENERATED_DECLARATIONS-protected include.

Warning: mch_expandpath (path.h.generated.h) was moved manually. So far it is
the only exception.
2014-06-02 11:04:17 -03:00
ZyX
880957ad4e Move documentation from function declarations to definitions
Uses a perl script to move it (scripts/movedocs.pl)
2014-06-02 11:04:04 -03:00
Rui Abreu Ferreira
1971cc30b5 Add --api-metadata command line option
- New command line option prints the binary API metadata object
  and exits
2014-06-02 10:34:51 -03:00
John Szakmeister
7e797067df Make it easier to turn the bundled dependencies off. 2014-05-31 13:15:56 -04:00
Nicolas Hillegeer
cd457b72ec travis/coverity: hotfix #2, unbreak build
I hadn't spotted that the `sh -e` commandline was being used. I *think* this
is what's causing the exit 0 line not to run. Pray for success.

It's a real shame I can't this locally, what a mess.
2014-05-31 16:57:42 +02:00
Nicolas Hillegeer
9d60365e99 travis/coverity: hotfix, alwasy return success
It seems the coverity script likes to return 1 (error) when the current
branch does not follow its pattern. Temporarily disable that.
2014-05-31 16:48:51 +02:00
Nicolas Hillegeer
7f9caaf30d travis/coverity: add coverity support
Run only on push to branch coverity-scan. We can use a cron script to do
this 4 times a week (that's our allowance).

NOTE: possible future improvements are:

1. Fold the build matrix item into another short one so we don't overburden
   travis. It's a little less clear but it should be nicer on the
   infrastructure.
2. Change the security token, one can do that from the coverity admin page.
3. Don't do the naive `make depend`, but use the prebuilt libraries.
2014-05-31 16:41:23 +02:00
John Szakmeister
a581173e71 Turn off -Werror by default.
It inteferes with development activities by breaking your build in the
middle of a refactor.  Instead, let's enable -Werror on the Travis CI
builds via a TRAVIS_CI_BUILD option.
2014-05-29 17:37:12 -04:00
Thiago de Arruda
a001b8cb0c Build: Fix autocmd removal from cleanup function 2014-05-28 08:52:54 -03:00
Thiago de Arruda
6b006dd7a2 API: Events: Automatically pass channel ids to API functions
The dispatch function generator was customized to allow for API functions to
declare a 'channel_id' as first argument.
2014-05-28 08:52:54 -03:00
Thiago de Arruda
a80a68c927 Build: Enable valgrind's --leak-check when testing the API 2014-05-26 14:02:12 -03:00
Thiago de Arruda
139c7ffdc7 API: Events: Return channel id from the API discover request
This refactors msgapck_rpc_{dipatch,call} to receive the channel id as
argument. Now the discovery request returns the [id, metadata] array.
2014-05-26 14:02:12 -03:00
Thiago de Arruda
6c96e42e2c API: Test: Setup basic test infrastructure
- Add a 'expect' utility script that can run simple API tests using clients
  developed for any platform.
- Extend travis build matrix to run API tests using the python client and
  valgrind.

This script can be used to write API tests without having to manage nvim's
lifetime:

- It starts a single nvim instance listening on a known socket
- Invokes the test runner, which should connect to NEOVIM_LISTEN_ADDRESS
- The nvim instance started by the script provides a `BeforeEachTest` function,
  which should be called before each test to reset nvim to a clean state.
- It takes care of shutting down nvim once the tests are finished.

As explained
[here](https://github.com/neovim/neovim/pull/737#issuecomment-43941520), it's
not possible to fully reset nvim to it's initial state, but the `BeforeEachTest`
function should be enough for most test cases. Tests requiring a fully clean
nvim instance should take care of starting/stopping nvim.
2014-05-23 16:06:59 -03:00
Thiago de Arruda
32b6122460 Remove hardcoded type names from msgpack-gen.lua
Except for the `Error *` type, all parameter types are valid identifiers, so
reuse that LPeg rule.
2014-05-17 08:05:44 -03:00
Eliseo Martínez
a6734844ca Introduce nvim namespace: Fix build process.
- Leave src as include dir (for includes to recognize 'nvim/' prefix).
- Change subdirectory from src to src/nvim.
- Fix msgpack generation.
- Fix some other paths to new locations.
2014-05-15 20:46:01 +02:00
Thiago de Arruda
b3268d0712 Refactor API types and prototypes
- Split functions with multiple files in the 'api' subdirectory
- Move/Add more types in the 'api/defs.h' header
- Add more prototypes
- Refactor scripts/msgpack-gen.lua
- Move msgpack modules to 'os' subdirectory
2014-05-12 19:28:30 -03:00
Justin M. Keyes
973baa2a06 coveralls upload should not fail the CI build
- swallow error code
2014-05-07 13:50:30 -04:00