api: api_info()['version']

API level is disconnected from NVIM version. The API metadata holds the
current API level, and the lowest backwards-compatible level supported
by this instance.

Release 0.1.6 is the first release that reports the Nvim version and API
level.

    metadata['version'] = {
      major: 0,
      minor: 1,
      patch: 6,
      api_level: 1,
      api_compatible: 0,
      api_prerelease: false,
    }

The API level may remain unchanged across Nvim releases if the API has
not changed.

When changing the API,
    - set NVIM_API_PRERELEASE to true
    - increment NVIM_API_LEVEL (at most once per Nvim version)
    - adjust NVIM_API_LEVEL_COMPAT if backwards-compatibility was broken

api_level_0.mpack was generated from Nvim 0.1.5 with:
    nvim --api-info
This commit is contained in:
Justin M. Keyes
2016-10-26 15:20:00 +02:00
parent f25797f869
commit c5f5f427c6
11 changed files with 100 additions and 95 deletions

View File

@@ -18,9 +18,9 @@
#include "nvim/map.h"
#include "nvim/option.h"
#include "nvim/option_defs.h"
#include "nvim/version.h"
#include "nvim/eval/typval_encode.h"
#include "nvim/lib/kvec.h"
#include "auto/versiondef.h"
/// Helper structure for vim_to_object
typedef struct {
@@ -764,10 +764,10 @@ Dictionary api_metadata(void)
static Dictionary metadata = ARRAY_DICT_INIT;
if (!metadata.size) {
PUT(metadata, "version", DICTIONARY_OBJ(version_dict()));
init_function_metadata(&metadata);
init_error_type_metadata(&metadata);
init_type_metadata(&metadata);
init_api_level_metadata(&metadata);
}
return copy_object(DICTIONARY_OBJ(metadata)).data.dictionary;
@@ -827,17 +827,6 @@ static void init_type_metadata(Dictionary *metadata)
PUT(*metadata, "types", DICTIONARY_OBJ(types));
}
static void init_api_level_metadata(Dictionary *metadata)
{
Dictionary version = ARRAY_DICT_INIT;
PUT(version, "current", INTEGER_OBJ(NVIM_API_CURRENT));
PUT(version, "compatibility", INTEGER_OBJ(NVIM_API_COMPATIBILITY));
#ifdef NVIM_API_PRERELEASE
PUT(version, "prerelease", BOOLEAN_OBJ(true));
#endif
PUT(*metadata, "api_level", DICTIONARY_OBJ(version));
}
/// Creates a deep clone of an object
Object copy_object(Object obj)