[arch-commits] Commit in bash-language-server/repos/community-x86_64 (6 files)
Maxim Baz
maximbaz at archlinux.org
Mon Dec 23 14:11:05 UTC 2019
Date: Monday, December 23, 2019 @ 14:11:05
Author: maximbaz
Revision: 539243
archrelease: copy trunk to community-x86_64
Added:
bash-language-server/repos/community-x86_64/0001-node-tree-sitter-nodejs-12-update.patch
(from rev 539242, bash-language-server/trunk/0001-node-tree-sitter-nodejs-12-update.patch)
bash-language-server/repos/community-x86_64/PKGBUILD
(from rev 539242, bash-language-server/trunk/PKGBUILD)
bash-language-server/repos/community-x86_64/bash-language-server-nodejs-12-update.patch
(from rev 539242, bash-language-server/trunk/bash-language-server-nodejs-12-update.patch)
Deleted:
bash-language-server/repos/community-x86_64/0001-node-tree-sitter-nodejs-12-update.patch
bash-language-server/repos/community-x86_64/PKGBUILD
bash-language-server/repos/community-x86_64/bash-language-server-nodejs-12-update.patch
----------------------------------------------+
0001-node-tree-sitter-nodejs-12-update.patch | 1488 ++++++++++++-------------
PKGBUILD | 64 -
bash-language-server-nodejs-12-update.patch | 30
3 files changed, 791 insertions(+), 791 deletions(-)
Deleted: 0001-node-tree-sitter-nodejs-12-update.patch
===================================================================
--- 0001-node-tree-sitter-nodejs-12-update.patch 2019-12-23 14:11:00 UTC (rev 539242)
+++ 0001-node-tree-sitter-nodejs-12-update.patch 2019-12-23 14:11:05 UTC (rev 539243)
@@ -1,744 +0,0 @@
-From c526efc6500a1c35d71aee9ce170190b06a7210f Mon Sep 17 00:00:00 2001
-From: "Xl.W" <shawlix+git at gmail.com>
-Date: Thu, 22 Aug 2019 13:33:30 +0800
-Subject: [PATCH] node-tree-sitter: nodejs 12 update
-
----
- src/conversions.cc | 69 +++++++++++++++++++++-------------
- src/language.cc | 4 +-
- src/logger.cc | 10 ++---
- src/node.cc | 75 +++++++++++++++++++++----------------
- src/parser.cc | 91 ++++++++++++++++++++++++++-------------------
- src/tree.cc | 37 ++++++++++++------
- src/tree_cursor.cc | 14 ++++---
- test/node_test.js | 2 +-
- test/parser_test.js | 2 +-
- 9 files changed, 180 insertions(+), 124 deletions(-)
-
-diff --git a/src/conversions.cc b/src/conversions.cc
-index d024b4c..6d685cd 100644
---- a/src/conversions.cc
-+++ b/src/conversions.cc
-@@ -29,7 +29,7 @@ void InitConversions(Local<Object> exports) {
-
- point_transfer_buffer = static_cast<uint32_t *>(malloc(2 * sizeof(uint32_t)));
- auto js_point_transfer_buffer = ArrayBuffer::New(Isolate::GetCurrent(), point_transfer_buffer, 2 * sizeof(uint32_t));
-- exports->Set(Nan::New("pointTransferArray").ToLocalChecked(), Uint32Array::New(js_point_transfer_buffer, 0, 2));
-+ Nan::Set(exports, Nan::New("pointTransferArray").ToLocalChecked(), Uint32Array::New(js_point_transfer_buffer, 0, 2));
- }
-
- void TransferPoint(const TSPoint &point) {
-@@ -39,10 +39,10 @@ void TransferPoint(const TSPoint &point) {
-
- Local<Object> RangeToJS(const TSRange &range) {
- Local<Object> result = Nan::New<Object>();
-- result->Set(Nan::New(start_position_key), PointToJS(range.start_point));
-- result->Set(Nan::New(start_index_key), ByteCountToJS(range.start_byte));
-- result->Set(Nan::New(end_position_key), PointToJS(range.end_point));
-- result->Set(Nan::New(end_index_key), ByteCountToJS(range.end_byte));
-+ Nan::Set(result, Nan::New(start_position_key), PointToJS(range.start_point));
-+ Nan::Set(result, Nan::New(start_index_key), ByteCountToJS(range.start_byte));
-+ Nan::Set(result, Nan::New(end_position_key), PointToJS(range.end_point));
-+ Nan::Set(result, Nan::New(end_index_key), ByteCountToJS(range.end_byte));
- return result;
- }
-
-@@ -56,8 +56,13 @@ Nan::Maybe<TSRange> RangeFromJS(const Local<Value> &arg) {
-
- Local<Object> js_range = Local<Object>::Cast(arg);
-
-- #define INIT(field, key, Type) { \
-- auto field = Type(js_range->Get(Nan::New(key))); \
-+ #define INIT(field, key, Convert) { \
-+ auto value = Nan::Get(js_range, Nan::New(key)); \
-+ if (value.IsEmpty()) { \
-+ Nan::ThrowTypeError("Range must be a {startPosition, endPosition, startIndex, endIndex} object"); \
-+ return Nan::Nothing<TSRange>(); \
-+ } \
-+ auto field = Convert(value.ToLocalChecked()); \
- if (field.IsJust()) { \
- result.field = field.FromJust(); \
- } else { \
-@@ -77,41 +82,52 @@ Nan::Maybe<TSRange> RangeFromJS(const Local<Value> &arg) {
-
- Local<Object> PointToJS(const TSPoint &point) {
- Local<Object> result = Nan::New<Object>();
-- result->Set(Nan::New(row_key), Nan::New<Number>(point.row));
-- result->Set(Nan::New(column_key), ByteCountToJS(point.column));
-+ Nan::Set(result, Nan::New(row_key), Nan::New<Number>(point.row));
-+ Nan::Set(result, Nan::New(column_key), ByteCountToJS(point.column));
- return result;
- }
-
- Nan::Maybe<TSPoint> PointFromJS(const Local<Value> &arg) {
-- if (!arg->IsObject()) {
-+ Local<Object> js_point;
-+ if (!Nan::To<Object>(arg).ToLocal(&js_point)) {
- Nan::ThrowTypeError("Point must be a {row, column} object");
- return Nan::Nothing<TSPoint>();
- }
-
-- Local<Object> js_point = Local<Object>::Cast(arg);
-- Local<Value> js_row = js_point->Get(Nan::New(row_key));
-- if (!js_row->IsNumber()) {
-- Nan::ThrowTypeError("Point.row must be a number");
-+ Local<Value> js_row;
-+ if (!Nan::Get(js_point, Nan::New(row_key)).ToLocal(&js_row)) {
-+ Nan::ThrowTypeError("Point must be a {row, column} object");
- return Nan::Nothing<TSPoint>();
- }
-
-- Local<Value> js_column = js_point->Get(Nan::New(column_key));
-- if (!js_column->IsNumber()) {
-- Nan::ThrowTypeError("Point.column must be a number");
-+ Local<Value> js_column;
-+ if (!Nan::Get(js_point, Nan::New(column_key)).ToLocal(&js_column)) {
-+ Nan::ThrowTypeError("Point must be a {row, column} object");
- return Nan::Nothing<TSPoint>();
- }
-
-- uint32_t row, column;
-- if (std::isfinite(js_row->NumberValue())) {
-- row = static_cast<uint32_t>(js_row->Int32Value());
-- } else {
-+ uint32_t row;
-+ if (!std::isfinite(Nan::To<double>(js_row).FromMaybe(0))) {
- row = UINT32_MAX;
-+ } else {
-+ auto maybe_row = Nan::To<uint32_t>(js_row);
-+ if (!maybe_row.IsJust()) {
-+ Nan::ThrowTypeError("Point.row must be a number");
-+ return Nan::Nothing<TSPoint>();
-+ }
-+ row = maybe_row.FromJust();
- }
-
-- if (std::isfinite(js_column->NumberValue())) {
-- column = static_cast<uint32_t>(js_column->Int32Value()) * BYTES_PER_CHARACTER;
-- } else {
-+ uint32_t column;
-+ if (!std::isfinite(Nan::To<double>(js_column).FromMaybe(0))) {
- column = UINT32_MAX;
-+ } else {
-+ auto maybe_column = Nan::To<uint32_t>(js_column);
-+ if (!maybe_column.IsJust()) {
-+ Nan::ThrowTypeError("Point.column must be a number");
-+ return Nan::Nothing<TSPoint>();
-+ }
-+ column = maybe_column.FromJust();
- }
-
- return Nan::Just<TSPoint>({row, column});
-@@ -122,12 +138,13 @@ Local<Number> ByteCountToJS(uint32_t byte_count) {
- }
-
- Nan::Maybe<uint32_t> ByteCountFromJS(const v8::Local<v8::Value> &arg) {
-- if (!arg->IsUint32()) {
-+ auto result = Nan::To<uint32_t>(arg);
-+ if (!result.IsJust()) {
- Nan::ThrowTypeError("Character index must be a number");
- return Nan::Nothing<uint32_t>();
- }
-
-- return Nan::Just<uint32_t>(arg->Uint32Value() * BYTES_PER_CHARACTER);
-+ return Nan::Just<uint32_t>(result.FromJust() * BYTES_PER_CHARACTER);
- }
-
- } // namespace node_tree_sitter
-diff --git a/src/language.cc b/src/language.cc
-index 9a25b02..a804433 100644
---- a/src/language.cc
-+++ b/src/language.cc
-@@ -77,12 +77,12 @@ static void GetNodeFieldNamesById(const Nan::FunctionCallbackInfo<Value> &info)
- void Init(Local<Object> exports) {
- exports->Set(
- Nan::New("getNodeTypeNamesById").ToLocalChecked(),
-- Nan::New<FunctionTemplate>(GetNodeTypeNamesById)->GetFunction()
-+ Nan::GetFunction(Nan::New<FunctionTemplate>(GetNodeTypeNamesById)).ToLocalChecked()
- );
-
- exports->Set(
- Nan::New("getNodeFieldNamesById").ToLocalChecked(),
-- Nan::New<FunctionTemplate>(GetNodeFieldNamesById)->GetFunction()
-+ Nan::GetFunction(Nan::New<FunctionTemplate>(GetNodeFieldNamesById)).ToLocalChecked()
- );
- }
-
-diff --git a/src/logger.cc b/src/logger.cc
-index 00e624e..5f0cacd 100644
---- a/src/logger.cc
-+++ b/src/logger.cc
-@@ -36,21 +36,21 @@ void Logger::Log(void *payload, TSLogType type, const char *message_str) {
-
- string key = message.substr(key_pos, (value_sep_pos - key_pos));
- string value = message.substr(val_pos, (param_sep_pos - val_pos));
-- params->Set(Nan::New(key).ToLocalChecked(), Nan::New(value).ToLocalChecked());
-+ Nan::Set(params, Nan::New(key).ToLocalChecked(), Nan::New(value).ToLocalChecked());
- }
-
- Local<Value> argv[3] = { name, params, type_name };
- TryCatch try_catch(Isolate::GetCurrent());
-- fn->Call(fn->CreationContext()->Global(), 3, argv);
-+ Nan::Call(fn, fn->CreationContext()->Global(), 3, argv);
- if (try_catch.HasCaught()) {
- Local<Value> log_argv[2] = {
- Nan::New("Error in debug callback:").ToLocalChecked(),
- try_catch.Exception()
- };
-
-- Local<Object> console = Local<Object>::Cast(fn->CreationContext()->Global()->Get(Nan::New("console").ToLocalChecked()));
-- Local<Function> error_fn = Local<Function>::Cast(console->Get(Nan::New("error").ToLocalChecked()));
-- error_fn->Call(console, 2, log_argv);
-+ Local<Object> console = Local<Object>::Cast(Nan::Get(fn->CreationContext()->Global(), Nan::New("console").ToLocalChecked()).ToLocalChecked());
-+ Local<Function> error_fn = Local<Function>::Cast(Nan::Get(console, Nan::New("error").ToLocalChecked()).ToLocalChecked());
-+ Nan::Call(error_fn, console, 2, log_argv);
- }
- }
-
-diff --git a/src/node.cc b/src/node.cc
-index 8a5517f..5f4ad93 100644
---- a/src/node.cc
-+++ b/src/node.cc
-@@ -27,7 +27,8 @@ static inline void setup_transfer_buffer(uint32_t node_count) {
- transfer_buffer_length = new_length;
- transfer_buffer = static_cast<uint32_t *>(malloc(transfer_buffer_length * sizeof(uint32_t)));
- auto js_transfer_buffer = ArrayBuffer::New(Isolate::GetCurrent(), transfer_buffer, transfer_buffer_length * sizeof(uint32_t));
-- Nan::New(module_exports)->Set(
-+ Nan::Set(
-+ Nan::New(module_exports),
- Nan::New("nodeTransferArray").ToLocalChecked(),
- Uint32Array::New(js_transfer_buffer, 0, transfer_buffer_length)
- );
-@@ -56,13 +57,12 @@ static void MarshalNodes(const Nan::FunctionCallbackInfo<Value> &info,
- *(p++) = node.context[2];
- *(p++) = node.context[3];
- if (node.id) {
-- result->Set(i, Nan::New(ts_node_symbol(node)));
-+ Nan::Set(result, i, Nan::New(ts_node_symbol(node)));
- } else {
-- result->Set(i, Nan::Null());
-+ Nan::Set(result, i, Nan::Null());
- }
- } else {
-- assert(!cache_entry->second->node.IsNearDeath());
-- result->Set(i, Nan::New(cache_entry->second->node));
-+ Nan::Set(result, i, Nan::New(cache_entry->second->node));
- }
- }
- info.GetReturnValue().Set(result);
-@@ -83,7 +83,6 @@ void MarshalNode(const Nan::FunctionCallbackInfo<Value> &info, const Tree *tree,
- info.GetReturnValue().Set(Nan::New(ts_node_symbol(node)));
- }
- } else {
-- assert(!cache_entry->second->node.IsNearDeath());
- info.GetReturnValue().Set(Nan::New(cache_entry->second->node));
- }
- }
-@@ -317,7 +316,7 @@ static void Child(const Nan::FunctionCallbackInfo<Value> &info) {
- Nan::ThrowTypeError("Second argument must be an integer");
- return;
- }
-- uint32_t index = info[1]->Uint32Value();
-+ uint32_t index = Nan::To<uint32_t>(info[1]).FromJust();
- MarshalNode(info, tree, ts_node_child(node, index));
- return;
- }
-@@ -333,7 +332,7 @@ static void NamedChild(const Nan::FunctionCallbackInfo<Value> &info) {
- Nan::ThrowTypeError("Second argument must be an integer");
- return;
- }
-- uint32_t index = info[1]->Uint32Value();
-+ uint32_t index = Nan::To<uint32_t>(info[1]).FromJust();
- MarshalNode(info, tree, ts_node_named_child(node, index));
- return;
- }
-@@ -470,26 +469,37 @@ bool symbol_set_from_js(SymbolSet *symbols, const Local<Value> &value, const TSL
-
- Local<Array> js_types = Local<Array>::Cast(value);
- for (unsigned i = 0, n = js_types->Length(); i < n; i++) {
-- Local<Value> js_types_i = js_types->Get(i);
-- if (!js_types_i->IsString()) {
-- Nan::ThrowTypeError("Argument must be a string or array of strings");
-- return false;
-- }
--
-- Local<String> js_node_type = Local<String>::Cast(js_types_i);
-- std::string node_type(js_node_type->Utf8Length(), '\0');
-- js_node_type->WriteUtf8(&node_type[0]);
--
-- if (node_type == "ERROR") {
-- symbols->add(static_cast<TSSymbol>(-1));
-- continue;
-- }
-+ Local<Value> js_node_type_value;
-+ if (Nan::Get(js_types, i).ToLocal(&js_node_type_value)) {
-+ Local<String> js_node_type;
-+ if (Nan::To<String>(js_node_type_value).ToLocal(&js_node_type)) {
-+ std::string node_type(js_node_type->Utf8Length(Isolate::GetCurrent()), '\0');
-+ js_node_type->WriteUtf8(
-+
-+ // Nan doesn't wrap this functionality
-+ #if NODE_MAJOR_VERSION >= 12
-+ Isolate::GetCurrent(),
-+ #endif
-+
-+ &node_type[0]
-+ );
-+
-+ if (node_type == "ERROR") {
-+ symbols->add(static_cast<TSSymbol>(-1));
-+ } else {
-+ for (TSSymbol j = 0; j < symbol_count; j++) {
-+ if (node_type == ts_language_symbol_name(language, j)) {
-+ symbols->add(j);
-+ }
-+ }
-+ }
-
-- for (TSSymbol j = 0; j < symbol_count; j++) {
-- if (node_type == ts_language_symbol_name(language, j)) {
-- symbols->add(j);
-+ continue;
- }
- }
-+
-+ Nan::ThrowTypeError("Argument must be a string or array of strings");
-+ return false;
- }
-
- return true;
-@@ -542,13 +552,13 @@ static void DescendantsOfType(const Nan::FunctionCallbackInfo<Value> &info) {
- TSPoint start_point = {0, 0};
- TSPoint end_point = {UINT32_MAX, UINT32_MAX};
-
-- if (info[2]->BooleanValue()) {
-+ if (info.Length() > 2) {
- auto maybe_start_point = PointFromJS(info[2]);
- if (maybe_start_point.IsNothing()) return;
- start_point = maybe_start_point.FromJust();
- }
-
-- if (info[3]->BooleanValue()) {
-+ if (info.Length() > 3) {
- auto maybe_end_point = PointFromJS(info[3]);
- if (maybe_end_point.IsNothing()) return;
- end_point = maybe_end_point.FromJust();
-@@ -606,7 +616,7 @@ static void ChildNodesForFieldId(const Nan::FunctionCallbackInfo<Value> &info) {
- Nan::ThrowTypeError("Second argument must be an integer");
- return;
- }
-- uint32_t field_id = info[1]->Uint32Value();
-+ uint32_t field_id = Nan::To<uint32_t>(info[1]).FromJust();
-
- vector<TSNode> result;
- ts_tree_cursor_reset(&scratch_cursor, node);
-@@ -631,7 +641,7 @@ static void ChildNodeForFieldId(const Nan::FunctionCallbackInfo<Value> &info) {
- Nan::ThrowTypeError("Second argument must be an integer");
- return;
- }
-- uint32_t field_id = info[1]->Uint32Value();
-+ uint32_t field_id = Nan::To<uint32_t>(info[1]).FromJust();
- MarshalNode(info, tree, ts_node_child_by_field_id(node, field_id));
- return;
- }
-@@ -710,16 +720,17 @@ void Init(Local<Object> exports) {
- };
-
- for (size_t i = 0; i < length_of_array(methods); i++) {
-- result->Set(
-+ Nan::Set(
-+ result,
- Nan::New(methods[i].name).ToLocalChecked(),
-- Nan::New<FunctionTemplate>(methods[i].callback)->GetFunction()
-+ Nan::GetFunction(Nan::New<FunctionTemplate>(methods[i].callback)).ToLocalChecked()
- );
- }
-
- module_exports.Reset(exports);
- setup_transfer_buffer(1);
-
-- exports->Set(Nan::New("NodeMethods").ToLocalChecked(), result);
-+ Nan::Set(exports, Nan::New("NodeMethods").ToLocalChecked(), result);
- }
-
- } // namespace node_methods
-diff --git a/src/parser.cc b/src/parser.cc
-index 7eddd39..420c7b1 100644
---- a/src/parser.cc
-+++ b/src/parser.cc
-@@ -26,11 +26,8 @@ class CallbackInput {
- : callback(callback),
- byte_offset(0),
- partial_string_offset(0) {
-- if (js_buffer_size->IsUint32()) {
-- buffer.resize(Local<Integer>::Cast(js_buffer_size)->Uint32Value());
-- } else {
-- buffer.resize(32 * 1024);
-- }
-+ uint32_t buffer_size = Nan::To<uint32_t>(js_buffer_size).FromMaybe(32 * 1024);
-+ buffer.resize(buffer_size);
- }
-
- TSInput Input() {
-@@ -51,8 +48,9 @@ class CallbackInput {
- reader->partial_string.Reset();
- }
-
-+ *bytes_read = 0;
- Local<String> result;
-- uint32_t start;
-+ uint32_t start = 0;
- if (reader->partial_string_offset) {
- result = Nan::New(reader->partial_string);
- start = reader->partial_string_offset;
-@@ -61,18 +59,26 @@ class CallbackInput {
- uint32_t utf16_unit = byte / 2;
- Local<Value> argv[2] = { Nan::New<Number>(utf16_unit), PointToJS(position) };
- TryCatch try_catch(Isolate::GetCurrent());
-- auto result_value = callback->Call(Nan::Null(), 2, argv);
-- if (!try_catch.HasCaught() && result_value->IsString()) {
-- result = Local<String>::Cast(result_value);
-- start = 0;
-- } else {
-- *bytes_read = 0;
-- start = 0;
-- return "";
-- }
-+ auto maybe_result_value = Nan::Call(callback, callback->CreationContext()->Global(), 2, argv);
-+ if (try_catch.HasCaught()) return nullptr;
-+
-+ Local<Value> result_value;
-+ if (!maybe_result_value.ToLocal(&result_value)) return nullptr;
-+ if (!Nan::To<String>(result_value).ToLocal(&result)) return nullptr;
- }
-
-- int utf16_units_read = result->Write(reader->buffer.data(), start, reader->buffer.size(), 2);
-+ int utf16_units_read = result->Write(
-+
-+ // Nan doesn't wrap this functionality
-+ #if NODE_MAJOR_VERSION >= 12
-+ Isolate::GetCurrent(),
-+ #endif
-+
-+ reader->buffer.data(),
-+ start,
-+ reader->buffer.size(),
-+ 2
-+ );
- int end = start + utf16_units_read;
- *bytes_read = 2 * utf16_units_read;
-
-@@ -173,9 +179,9 @@ void Parser::Init(Local<Object> exports) {
- Nan::SetPrototypeMethod(tpl, methods[i].name, methods[i].callback);
- }
-
-- constructor.Reset(Nan::Persistent<Function>(tpl->GetFunction()));
-- exports->Set(class_name, Nan::New(constructor));
-- exports->Set(Nan::New("LANGUAGE_VERSION").ToLocalChecked(), Nan::New<Number>(TREE_SITTER_LANGUAGE_VERSION));
-+ constructor.Reset(Nan::Persistent<Function>(Nan::GetFunction(tpl).ToLocalChecked()));
-+ Nan::Set(exports, class_name, Nan::New(constructor));
-+ Nan::Set(exports, Nan::New("LANGUAGE_VERSION").ToLocalChecked(), Nan::New<Number>(TREE_SITTER_LANGUAGE_VERSION));
- }
-
- Parser::Parser() : parser_(ts_parser_new()), is_parsing_async_(false) {}
-@@ -188,7 +194,9 @@ static bool handle_included_ranges(TSParser *parser, Local<Value> arg) {
- auto js_included_ranges = Local<Array>::Cast(arg);
- vector<TSRange> included_ranges;
- for (unsigned i = 0; i < js_included_ranges->Length(); i++) {
-- auto maybe_range = RangeFromJS(js_included_ranges->Get(i));
-+ Local<Value> range_value;
-+ if (!Nan::Get(js_included_ranges, i).ToLocal(&range_value)) return false;
-+ auto maybe_range = RangeFromJS(range_value);
- if (!maybe_range.IsJust()) return false;
- auto range = maybe_range.FromJust();
- if (range.start_byte < last_included_range_end) {
-@@ -250,9 +258,10 @@ void Parser::Parse(const Nan::FunctionCallbackInfo<Value> &info) {
-
- Local<Function> callback = Local<Function>::Cast(info[0]);
-
-+ Local<Object> js_old_tree;
- const TSTree *old_tree = nullptr;
-- if (info.Length() > 1 && info[1]->BooleanValue()) {
-- const Tree *tree = Tree::UnwrapTree(info[1]);
-+ if (info.Length() > 1 && Nan::To<Object>(info[1]).ToLocal(&js_old_tree)) {
-+ const Tree *tree = Tree::UnwrapTree(js_old_tree);
- if (!tree) {
- Nan::ThrowTypeError("Second argument must be a tree");
- return;
-@@ -305,9 +314,10 @@ void Parser::ParseTextBuffer(const Nan::FunctionCallbackInfo<Value> &info) {
- return;
- }
-
-+ Local<Object> js_old_tree;
- const TSTree *old_tree = nullptr;
-- if (info.Length() > 2 && info[2]->BooleanValue()) {
-- const Tree *tree = Tree::UnwrapTree(info[2]);
-+ if (info.Length() > 2 && Nan::To<Object>(info[2]).ToLocal(&js_old_tree)) {
-+ const Tree *tree = Tree::UnwrapTree(js_old_tree);
- if (!tree) {
- Nan::ThrowTypeError("Second argument must be a tree");
- return;
-@@ -322,18 +332,21 @@ void Parser::ParseTextBuffer(const Nan::FunctionCallbackInfo<Value> &info) {
-
- // If a `syncTimeoutMicros` option is passed, parse synchronously
- // for the given amount of time before queuing an async task.
-- if (info[4]->BooleanValue()) {
-- double js_sync_timeout = info[4]->NumberValue();
-+ double js_sync_timeout = Nan::To<double>(info[4]).FromMaybe(-1);
-+ if (js_sync_timeout > 0) {
- size_t sync_timeout;
-
- // If the timeout is `Infinity`, then parse synchronously with no timeout.
-- if (js_sync_timeout > 0 && !std::isfinite(js_sync_timeout)) {
-+ if (js_sync_timeout && !std::isfinite(js_sync_timeout)) {
- sync_timeout = 0;
-- } else if (info[4]->IsUint32()) {
-- sync_timeout = info[4]->Uint32Value();
- } else {
-- Nan::ThrowTypeError("The `syncTimeoutMicros` option must be a positive integer.");
-- return;
-+ auto maybe_sync_timeout = Nan::To<uint32_t>(info[4]);
-+ if (maybe_sync_timeout.IsJust()) {
-+ sync_timeout = maybe_sync_timeout.FromJust();
-+ } else {
-+ Nan::ThrowTypeError("The `syncTimeoutMicros` option must be a positive integer.");
-+ return;
-+ }
- }
-
- // Logging is disabled for this method, because we can't call the
-@@ -348,7 +361,8 @@ void Parser::ParseTextBuffer(const Nan::FunctionCallbackInfo<Value> &info) {
- if (result) {
- delete input;
- Local<Value> argv[] = {Tree::NewInstance(result)};
-- info[0].As<Function>()->Call(Nan::Null(), 1, argv);
-+ auto callback = info[0].As<Function>();
-+ Nan::Call(callback, callback->CreationContext()->Global(), 1, argv);
- return;
- }
- }
-@@ -369,9 +383,10 @@ void Parser::ParseTextBufferSync(const Nan::FunctionCallbackInfo<Value> &info) {
- return;
- }
-
-- TSTree *old_tree = nullptr;
-- if (info.Length() > 1 && info[1]->BooleanValue()) {
-- const Tree *tree = Tree::UnwrapTree(info[1]);
-+ Local<Object> js_old_tree;
-+ const TSTree *old_tree = nullptr;
-+ if (info.Length() > 1 && Nan::To<Object>(info[1]).ToLocal(&js_old_tree)) {
-+ const Tree *tree = Tree::UnwrapTree(js_old_tree);
- if (!tree) {
- Nan::ThrowTypeError("Second argument must be a tree");
- return;
-@@ -411,7 +426,7 @@ void Parser::SetLogger(const Nan::FunctionCallbackInfo<Value> &info) {
- if (info[0]->IsFunction()) {
- if (current_logger.payload) delete (Logger *)current_logger.payload;
- ts_parser_set_logger(parser->parser_, Logger::Make(Local<Function>::Cast(info[0])));
-- } else if (!info[0]->BooleanValue()) {
-+ } else if (!Nan::To<bool>(info[0]).FromMaybe(true)) {
- if (current_logger.payload) delete (Logger *)current_logger.payload;
- ts_parser_set_logger(parser->parser_, { 0, 0 });
- } else {
-@@ -429,9 +444,7 @@ void Parser::PrintDotGraphs(const Nan::FunctionCallbackInfo<Value> &info) {
- return;
- }
-
-- Local<Boolean> value = Local<Boolean>::Cast(info[0]);
--
-- if (value->IsBoolean() && value->BooleanValue()) {
-+ if (Nan::To<bool>(info[0]).FromMaybe(false)) {
- ts_parser_print_dot_graphs(parser->parser_, 2);
- } else {
- ts_parser_print_dot_graphs(parser->parser_, -1);
-diff --git a/src/tree.cc b/src/tree.cc
-index c41437a..2800075 100644
---- a/src/tree.cc
-+++ b/src/tree.cc
-@@ -34,11 +34,11 @@ void Tree::Init(Local<Object> exports) {
- Nan::SetPrototypeMethod(tpl, methods[i].name, methods[i].callback);
- }
-
-- Local<Function> ctor = tpl->GetFunction();
-+ Local<Function> ctor = Nan::GetFunction(tpl).ToLocalChecked();
-
- constructor_template.Reset(tpl);
- constructor.Reset(ctor);
-- exports->Set(class_name, ctor);
-+ Nan::Set(exports, class_name, ctor);
- }
-
- Tree::Tree(TSTree *tree) : tree_(tree) {}
-@@ -53,10 +53,14 @@ Tree::~Tree() {
- Local<Value> Tree::NewInstance(TSTree *tree) {
- if (tree) {
- Local<Object> self;
-- MaybeLocal<Object> maybe_self = Nan::New(constructor)->NewInstance(Nan::GetCurrentContext());
-+ printf("NEW INSTANCE TIME %d\n", Nan::New(constructor)->IsFunction());
-+ MaybeLocal<Object> maybe_self = Nan::NewInstance(Nan::New(constructor));
- if (maybe_self.ToLocal(&self)) {
-+ puts("GOT A LOCAL");
- (new Tree(tree))->Wrap(self);
- return self;
-+ } else {
-+ puts("DID NOT GOT A LOCAL");
- }
- }
- return Nan::Null();
-@@ -70,14 +74,17 @@ const Tree *Tree::UnwrapTree(const Local<Value> &value) {
- }
-
- void Tree::New(const Nan::FunctionCallbackInfo<Value> &info) {
-- info.GetReturnValue().Set(Nan::Null());
-+ printf("IS CONSTRUCT CALL %d\n", info.IsConstructCall());
-+ info.GetReturnValue().Set(info.This());
- }
-
- #define read_number_from_js(out, value, name) \
-- if (!(value)->IsUint32()) { \
-+ maybe_number = Nan::To<uint32_t>(value); \
-+ if (maybe_number.IsNothing()) { \
- Nan::ThrowTypeError(name " must be an integer"); \
-+ return; \
- } \
-- *(out) = (value)->Uint32Value()
-+ *(out) = maybe_number.FromJust();
-
- #define read_byte_count_from_js(out, value, name) \
- read_number_from_js(out, value, name); \
-@@ -87,6 +94,7 @@ void Tree::Edit(const Nan::FunctionCallbackInfo<Value> &info) {
- Tree *tree = ObjectWrap::Unwrap<Tree>(info.This());
-
- TSInputEdit edit;
-+ Nan::Maybe<uint32_t> maybe_number = Nan::Nothing<uint32_t>();
- read_number_from_js(&edit.start_point.row, info[0], "startPosition.row");
- read_byte_count_from_js(&edit.start_point.column, info[1], "startPosition.column");
- read_number_from_js(&edit.old_end_point.row, info[2], "oldEndPosition.row");
-@@ -104,13 +112,16 @@ void Tree::Edit(const Nan::FunctionCallbackInfo<Value> &info) {
- TSNode node;
- node.id = entry.first;
- for (unsigned i = 0; i < 4; i++) {
-- node.context[i] = js_node->Get(i + 2)->Uint32Value();
-+ Local<Value> node_field;
-+ if (Nan::Get(js_node, i + 2).ToLocal(&node_field)) {
-+ node.context[i] = Nan::To<uint32_t>(node_field).FromMaybe(0);
-+ }
- }
-
- ts_node_edit(&node, &edit);
-
- for (unsigned i = 0; i < 4; i++) {
-- js_node->Set(i + 2, Nan::New(node.context[i]));
-+ Nan::Set(js_node, i + 2, Nan::New(node.context[i]));
- }
- }
-
-@@ -135,7 +146,7 @@ void Tree::GetChangedRanges(const Nan::FunctionCallbackInfo<Value> &info) {
-
- Local<Array> result = Nan::New<Array>();
- for (size_t i = 0; i < range_count; i++) {
-- result->Set(i, RangeToJS(ranges[i]));
-+ Nan::Set(result, i, RangeToJS(ranges[i]));
- }
-
- info.GetReturnValue().Set(result);
-@@ -197,7 +208,6 @@ void Tree::PrintDotGraph(const Nan::FunctionCallbackInfo<Value> &info) {
-
- static void FinalizeNode(const v8::WeakCallbackInfo<Tree::NodeCacheEntry> &info) {
- Tree::NodeCacheEntry *cache_entry = info.GetParameter();
-- assert(cache_entry->node.IsNearDeath());
- assert(!cache_entry->node.IsEmpty());
- cache_entry->node.Reset();
- if (cache_entry->tree) {
-@@ -211,9 +221,12 @@ void Tree::CacheNode(const Nan::FunctionCallbackInfo<Value> &info) {
- Tree *tree = ObjectWrap::Unwrap<Tree>(info.This());
- Local<Object> js_node = Local<Object>::Cast(info[0]);
-
-+ Local<Value> js_node_field1, js_node_field2;
-+ if (!Nan::Get(js_node, 0).ToLocal(&js_node_field1)) return;
-+ if (!Nan::Get(js_node, 1).ToLocal(&js_node_field2)) return;
- uint32_t key_parts[2] = {
-- js_node->Get(0)->Uint32Value(),
-- js_node->Get(1)->Uint32Value(),
-+ Nan::To<uint32_t>(js_node_field1).FromMaybe(0),
-+ Nan::To<uint32_t>(js_node_field2).FromMaybe(0)
- };
- const void *key = UnmarshalNodeId(key_parts);
-
-diff --git a/src/tree_cursor.cc b/src/tree_cursor.cc
-index 332a14b..a1bb741 100644
---- a/src/tree_cursor.cc
-+++ b/src/tree_cursor.cc
-@@ -49,8 +49,8 @@ void TreeCursor::Init(v8::Local<v8::Object> exports) {
- Nan::SetPrototypeMethod(tpl, methods[i].name, methods[i].callback);
- }
-
-- Local<Function> constructor_local = tpl->GetFunction();
-- exports->Set(class_name, constructor_local);
-+ Local<Function> constructor_local = Nan::GetFunction(tpl).ToLocalChecked();
-+ Nan::Set(exports, class_name, constructor_local);
- constructor.Reset(Nan::Persistent<Function>(constructor_local));
- }
-
-@@ -87,10 +87,12 @@ void TreeCursor::GotoFirstChild(const Nan::FunctionCallbackInfo<Value> &info) {
-
- void TreeCursor::GotoFirstChildForIndex(const Nan::FunctionCallbackInfo<Value> &info) {
- TreeCursor *cursor = Nan::ObjectWrap::Unwrap<TreeCursor>(info.This());
-- if (!info[0]->IsUint32()) {
-+ auto maybe_index = Nan::To<uint32_t>(info[0]);
-+ if (maybe_index.IsNothing()) {
- Nan::ThrowTypeError("Argument must be an integer");
-+ return;
- }
-- uint32_t goal_byte = info[0]->Uint32Value() * 2;
-+ uint32_t goal_byte = maybe_index.FromJust() * 2;
- int64_t child_index = ts_tree_cursor_goto_first_child_for_byte(&cursor->cursor_, goal_byte);
- if (child_index < 0) {
- info.GetReturnValue().Set(Nan::Null());
-@@ -120,7 +122,7 @@ void TreeCursor::EndPosition(const Nan::FunctionCallbackInfo<Value> &info) {
- void TreeCursor::CurrentNode(const Nan::FunctionCallbackInfo<Value> &info) {
- TreeCursor *cursor = Nan::ObjectWrap::Unwrap<TreeCursor>(info.This());
- Local<String> key = Nan::New<String>("tree").ToLocalChecked();
-- const Tree *tree = Tree::UnwrapTree(info.This()->Get(key));
-+ const Tree *tree = Tree::UnwrapTree(Nan::Get(info.This(), key).ToLocalChecked());
- TSNode node = ts_tree_cursor_current_node(&cursor->cursor_);
- node_methods::MarshalNode(info, tree, node);
- }
-@@ -128,7 +130,7 @@ void TreeCursor::CurrentNode(const Nan::FunctionCallbackInfo<Value> &info) {
- void TreeCursor::Reset(const Nan::FunctionCallbackInfo<Value> &info) {
- TreeCursor *cursor = Nan::ObjectWrap::Unwrap<TreeCursor>(info.This());
- Local<String> key = Nan::New<String>("tree").ToLocalChecked();
-- const Tree *tree = Tree::UnwrapTree(info.This()->Get(key));
-+ const Tree *tree = Tree::UnwrapTree(Nan::Get(info.This(), key).ToLocalChecked());
- TSNode node = node_methods::UnmarshalNode(tree);
- ts_tree_cursor_reset(&cursor->cursor_, node);
- }
-diff --git a/test/node_test.js b/test/node_test.js
-index 6455a9f..643ab3e 100644
---- a/test/node_test.js
-+++ b/test/node_test.js
-@@ -53,7 +53,7 @@ describe("Node", () => {
- });
-
- describe(".children", () => {
-- it("returns an array of child nodes", () => {
-+ it.only("returns an array of child nodes", () => {
- const tree = parser.parse("x10 + 1000");
- assert.equal(1, tree.rootNode.children.length);
- const sumNode = tree.rootNode.firstChild.firstChild;
-diff --git a/test/parser_test.js b/test/parser_test.js
-index 1645104..a1f6d17 100644
---- a/test/parser_test.js
-+++ b/test/parser_test.js
-@@ -100,7 +100,7 @@ describe("Parser", () => {
-
- it("reads from the given input", () => {
- const parts = ["first", "_", "second", "_", "third"];
-- const tree = parser.parse(() => parts.shift());
-+ const tree = parser.parse((index) => parts.shift());
- assert.equal(tree.rootNode.toString(), "(program (expression_statement (identifier)))");
- });
-
---
-2.23.0
-
Copied: bash-language-server/repos/community-x86_64/0001-node-tree-sitter-nodejs-12-update.patch (from rev 539242, bash-language-server/trunk/0001-node-tree-sitter-nodejs-12-update.patch)
===================================================================
--- 0001-node-tree-sitter-nodejs-12-update.patch (rev 0)
+++ 0001-node-tree-sitter-nodejs-12-update.patch 2019-12-23 14:11:05 UTC (rev 539243)
@@ -0,0 +1,744 @@
+From c526efc6500a1c35d71aee9ce170190b06a7210f Mon Sep 17 00:00:00 2001
+From: "Xl.W" <shawlix+git at gmail.com>
+Date: Thu, 22 Aug 2019 13:33:30 +0800
+Subject: [PATCH] node-tree-sitter: nodejs 12 update
+
+---
+ src/conversions.cc | 69 +++++++++++++++++++++-------------
+ src/language.cc | 4 +-
+ src/logger.cc | 10 ++---
+ src/node.cc | 75 +++++++++++++++++++++----------------
+ src/parser.cc | 91 ++++++++++++++++++++++++++-------------------
+ src/tree.cc | 37 ++++++++++++------
+ src/tree_cursor.cc | 14 ++++---
+ test/node_test.js | 2 +-
+ test/parser_test.js | 2 +-
+ 9 files changed, 180 insertions(+), 124 deletions(-)
+
+diff --git a/src/conversions.cc b/src/conversions.cc
+index d024b4c..6d685cd 100644
+--- a/src/conversions.cc
++++ b/src/conversions.cc
+@@ -29,7 +29,7 @@ void InitConversions(Local<Object> exports) {
+
+ point_transfer_buffer = static_cast<uint32_t *>(malloc(2 * sizeof(uint32_t)));
+ auto js_point_transfer_buffer = ArrayBuffer::New(Isolate::GetCurrent(), point_transfer_buffer, 2 * sizeof(uint32_t));
+- exports->Set(Nan::New("pointTransferArray").ToLocalChecked(), Uint32Array::New(js_point_transfer_buffer, 0, 2));
++ Nan::Set(exports, Nan::New("pointTransferArray").ToLocalChecked(), Uint32Array::New(js_point_transfer_buffer, 0, 2));
+ }
+
+ void TransferPoint(const TSPoint &point) {
+@@ -39,10 +39,10 @@ void TransferPoint(const TSPoint &point) {
+
+ Local<Object> RangeToJS(const TSRange &range) {
+ Local<Object> result = Nan::New<Object>();
+- result->Set(Nan::New(start_position_key), PointToJS(range.start_point));
+- result->Set(Nan::New(start_index_key), ByteCountToJS(range.start_byte));
+- result->Set(Nan::New(end_position_key), PointToJS(range.end_point));
+- result->Set(Nan::New(end_index_key), ByteCountToJS(range.end_byte));
++ Nan::Set(result, Nan::New(start_position_key), PointToJS(range.start_point));
++ Nan::Set(result, Nan::New(start_index_key), ByteCountToJS(range.start_byte));
++ Nan::Set(result, Nan::New(end_position_key), PointToJS(range.end_point));
++ Nan::Set(result, Nan::New(end_index_key), ByteCountToJS(range.end_byte));
+ return result;
+ }
+
+@@ -56,8 +56,13 @@ Nan::Maybe<TSRange> RangeFromJS(const Local<Value> &arg) {
+
+ Local<Object> js_range = Local<Object>::Cast(arg);
+
+- #define INIT(field, key, Type) { \
+- auto field = Type(js_range->Get(Nan::New(key))); \
++ #define INIT(field, key, Convert) { \
++ auto value = Nan::Get(js_range, Nan::New(key)); \
++ if (value.IsEmpty()) { \
++ Nan::ThrowTypeError("Range must be a {startPosition, endPosition, startIndex, endIndex} object"); \
++ return Nan::Nothing<TSRange>(); \
++ } \
++ auto field = Convert(value.ToLocalChecked()); \
+ if (field.IsJust()) { \
+ result.field = field.FromJust(); \
+ } else { \
+@@ -77,41 +82,52 @@ Nan::Maybe<TSRange> RangeFromJS(const Local<Value> &arg) {
+
+ Local<Object> PointToJS(const TSPoint &point) {
+ Local<Object> result = Nan::New<Object>();
+- result->Set(Nan::New(row_key), Nan::New<Number>(point.row));
+- result->Set(Nan::New(column_key), ByteCountToJS(point.column));
++ Nan::Set(result, Nan::New(row_key), Nan::New<Number>(point.row));
++ Nan::Set(result, Nan::New(column_key), ByteCountToJS(point.column));
+ return result;
+ }
+
+ Nan::Maybe<TSPoint> PointFromJS(const Local<Value> &arg) {
+- if (!arg->IsObject()) {
++ Local<Object> js_point;
++ if (!Nan::To<Object>(arg).ToLocal(&js_point)) {
+ Nan::ThrowTypeError("Point must be a {row, column} object");
+ return Nan::Nothing<TSPoint>();
+ }
+
+- Local<Object> js_point = Local<Object>::Cast(arg);
+- Local<Value> js_row = js_point->Get(Nan::New(row_key));
+- if (!js_row->IsNumber()) {
+- Nan::ThrowTypeError("Point.row must be a number");
++ Local<Value> js_row;
++ if (!Nan::Get(js_point, Nan::New(row_key)).ToLocal(&js_row)) {
++ Nan::ThrowTypeError("Point must be a {row, column} object");
+ return Nan::Nothing<TSPoint>();
+ }
+
+- Local<Value> js_column = js_point->Get(Nan::New(column_key));
+- if (!js_column->IsNumber()) {
+- Nan::ThrowTypeError("Point.column must be a number");
++ Local<Value> js_column;
++ if (!Nan::Get(js_point, Nan::New(column_key)).ToLocal(&js_column)) {
++ Nan::ThrowTypeError("Point must be a {row, column} object");
+ return Nan::Nothing<TSPoint>();
+ }
+
+- uint32_t row, column;
+- if (std::isfinite(js_row->NumberValue())) {
+- row = static_cast<uint32_t>(js_row->Int32Value());
+- } else {
++ uint32_t row;
++ if (!std::isfinite(Nan::To<double>(js_row).FromMaybe(0))) {
+ row = UINT32_MAX;
++ } else {
++ auto maybe_row = Nan::To<uint32_t>(js_row);
++ if (!maybe_row.IsJust()) {
++ Nan::ThrowTypeError("Point.row must be a number");
++ return Nan::Nothing<TSPoint>();
++ }
++ row = maybe_row.FromJust();
+ }
+
+- if (std::isfinite(js_column->NumberValue())) {
+- column = static_cast<uint32_t>(js_column->Int32Value()) * BYTES_PER_CHARACTER;
+- } else {
++ uint32_t column;
++ if (!std::isfinite(Nan::To<double>(js_column).FromMaybe(0))) {
+ column = UINT32_MAX;
++ } else {
++ auto maybe_column = Nan::To<uint32_t>(js_column);
++ if (!maybe_column.IsJust()) {
++ Nan::ThrowTypeError("Point.column must be a number");
++ return Nan::Nothing<TSPoint>();
++ }
++ column = maybe_column.FromJust();
+ }
+
+ return Nan::Just<TSPoint>({row, column});
+@@ -122,12 +138,13 @@ Local<Number> ByteCountToJS(uint32_t byte_count) {
+ }
+
+ Nan::Maybe<uint32_t> ByteCountFromJS(const v8::Local<v8::Value> &arg) {
+- if (!arg->IsUint32()) {
++ auto result = Nan::To<uint32_t>(arg);
++ if (!result.IsJust()) {
+ Nan::ThrowTypeError("Character index must be a number");
+ return Nan::Nothing<uint32_t>();
+ }
+
+- return Nan::Just<uint32_t>(arg->Uint32Value() * BYTES_PER_CHARACTER);
++ return Nan::Just<uint32_t>(result.FromJust() * BYTES_PER_CHARACTER);
+ }
+
+ } // namespace node_tree_sitter
+diff --git a/src/language.cc b/src/language.cc
+index 9a25b02..a804433 100644
+--- a/src/language.cc
++++ b/src/language.cc
+@@ -77,12 +77,12 @@ static void GetNodeFieldNamesById(const Nan::FunctionCallbackInfo<Value> &info)
+ void Init(Local<Object> exports) {
+ exports->Set(
+ Nan::New("getNodeTypeNamesById").ToLocalChecked(),
+- Nan::New<FunctionTemplate>(GetNodeTypeNamesById)->GetFunction()
++ Nan::GetFunction(Nan::New<FunctionTemplate>(GetNodeTypeNamesById)).ToLocalChecked()
+ );
+
+ exports->Set(
+ Nan::New("getNodeFieldNamesById").ToLocalChecked(),
+- Nan::New<FunctionTemplate>(GetNodeFieldNamesById)->GetFunction()
++ Nan::GetFunction(Nan::New<FunctionTemplate>(GetNodeFieldNamesById)).ToLocalChecked()
+ );
+ }
+
+diff --git a/src/logger.cc b/src/logger.cc
+index 00e624e..5f0cacd 100644
+--- a/src/logger.cc
++++ b/src/logger.cc
+@@ -36,21 +36,21 @@ void Logger::Log(void *payload, TSLogType type, const char *message_str) {
+
+ string key = message.substr(key_pos, (value_sep_pos - key_pos));
+ string value = message.substr(val_pos, (param_sep_pos - val_pos));
+- params->Set(Nan::New(key).ToLocalChecked(), Nan::New(value).ToLocalChecked());
++ Nan::Set(params, Nan::New(key).ToLocalChecked(), Nan::New(value).ToLocalChecked());
+ }
+
+ Local<Value> argv[3] = { name, params, type_name };
+ TryCatch try_catch(Isolate::GetCurrent());
+- fn->Call(fn->CreationContext()->Global(), 3, argv);
++ Nan::Call(fn, fn->CreationContext()->Global(), 3, argv);
+ if (try_catch.HasCaught()) {
+ Local<Value> log_argv[2] = {
+ Nan::New("Error in debug callback:").ToLocalChecked(),
+ try_catch.Exception()
+ };
+
+- Local<Object> console = Local<Object>::Cast(fn->CreationContext()->Global()->Get(Nan::New("console").ToLocalChecked()));
+- Local<Function> error_fn = Local<Function>::Cast(console->Get(Nan::New("error").ToLocalChecked()));
+- error_fn->Call(console, 2, log_argv);
++ Local<Object> console = Local<Object>::Cast(Nan::Get(fn->CreationContext()->Global(), Nan::New("console").ToLocalChecked()).ToLocalChecked());
++ Local<Function> error_fn = Local<Function>::Cast(Nan::Get(console, Nan::New("error").ToLocalChecked()).ToLocalChecked());
++ Nan::Call(error_fn, console, 2, log_argv);
+ }
+ }
+
+diff --git a/src/node.cc b/src/node.cc
+index 8a5517f..5f4ad93 100644
+--- a/src/node.cc
++++ b/src/node.cc
+@@ -27,7 +27,8 @@ static inline void setup_transfer_buffer(uint32_t node_count) {
+ transfer_buffer_length = new_length;
+ transfer_buffer = static_cast<uint32_t *>(malloc(transfer_buffer_length * sizeof(uint32_t)));
+ auto js_transfer_buffer = ArrayBuffer::New(Isolate::GetCurrent(), transfer_buffer, transfer_buffer_length * sizeof(uint32_t));
+- Nan::New(module_exports)->Set(
++ Nan::Set(
++ Nan::New(module_exports),
+ Nan::New("nodeTransferArray").ToLocalChecked(),
+ Uint32Array::New(js_transfer_buffer, 0, transfer_buffer_length)
+ );
+@@ -56,13 +57,12 @@ static void MarshalNodes(const Nan::FunctionCallbackInfo<Value> &info,
+ *(p++) = node.context[2];
+ *(p++) = node.context[3];
+ if (node.id) {
+- result->Set(i, Nan::New(ts_node_symbol(node)));
++ Nan::Set(result, i, Nan::New(ts_node_symbol(node)));
+ } else {
+- result->Set(i, Nan::Null());
++ Nan::Set(result, i, Nan::Null());
+ }
+ } else {
+- assert(!cache_entry->second->node.IsNearDeath());
+- result->Set(i, Nan::New(cache_entry->second->node));
++ Nan::Set(result, i, Nan::New(cache_entry->second->node));
+ }
+ }
+ info.GetReturnValue().Set(result);
+@@ -83,7 +83,6 @@ void MarshalNode(const Nan::FunctionCallbackInfo<Value> &info, const Tree *tree,
+ info.GetReturnValue().Set(Nan::New(ts_node_symbol(node)));
+ }
+ } else {
+- assert(!cache_entry->second->node.IsNearDeath());
+ info.GetReturnValue().Set(Nan::New(cache_entry->second->node));
+ }
+ }
+@@ -317,7 +316,7 @@ static void Child(const Nan::FunctionCallbackInfo<Value> &info) {
+ Nan::ThrowTypeError("Second argument must be an integer");
+ return;
+ }
+- uint32_t index = info[1]->Uint32Value();
++ uint32_t index = Nan::To<uint32_t>(info[1]).FromJust();
+ MarshalNode(info, tree, ts_node_child(node, index));
+ return;
+ }
+@@ -333,7 +332,7 @@ static void NamedChild(const Nan::FunctionCallbackInfo<Value> &info) {
+ Nan::ThrowTypeError("Second argument must be an integer");
+ return;
+ }
+- uint32_t index = info[1]->Uint32Value();
++ uint32_t index = Nan::To<uint32_t>(info[1]).FromJust();
+ MarshalNode(info, tree, ts_node_named_child(node, index));
+ return;
+ }
+@@ -470,26 +469,37 @@ bool symbol_set_from_js(SymbolSet *symbols, const Local<Value> &value, const TSL
+
+ Local<Array> js_types = Local<Array>::Cast(value);
+ for (unsigned i = 0, n = js_types->Length(); i < n; i++) {
+- Local<Value> js_types_i = js_types->Get(i);
+- if (!js_types_i->IsString()) {
+- Nan::ThrowTypeError("Argument must be a string or array of strings");
+- return false;
+- }
+-
+- Local<String> js_node_type = Local<String>::Cast(js_types_i);
+- std::string node_type(js_node_type->Utf8Length(), '\0');
+- js_node_type->WriteUtf8(&node_type[0]);
+-
+- if (node_type == "ERROR") {
+- symbols->add(static_cast<TSSymbol>(-1));
+- continue;
+- }
++ Local<Value> js_node_type_value;
++ if (Nan::Get(js_types, i).ToLocal(&js_node_type_value)) {
++ Local<String> js_node_type;
++ if (Nan::To<String>(js_node_type_value).ToLocal(&js_node_type)) {
++ std::string node_type(js_node_type->Utf8Length(Isolate::GetCurrent()), '\0');
++ js_node_type->WriteUtf8(
++
++ // Nan doesn't wrap this functionality
++ #if NODE_MAJOR_VERSION >= 12
++ Isolate::GetCurrent(),
++ #endif
++
++ &node_type[0]
++ );
++
++ if (node_type == "ERROR") {
++ symbols->add(static_cast<TSSymbol>(-1));
++ } else {
++ for (TSSymbol j = 0; j < symbol_count; j++) {
++ if (node_type == ts_language_symbol_name(language, j)) {
++ symbols->add(j);
++ }
++ }
++ }
+
+- for (TSSymbol j = 0; j < symbol_count; j++) {
+- if (node_type == ts_language_symbol_name(language, j)) {
+- symbols->add(j);
++ continue;
+ }
+ }
++
++ Nan::ThrowTypeError("Argument must be a string or array of strings");
++ return false;
+ }
+
+ return true;
+@@ -542,13 +552,13 @@ static void DescendantsOfType(const Nan::FunctionCallbackInfo<Value> &info) {
+ TSPoint start_point = {0, 0};
+ TSPoint end_point = {UINT32_MAX, UINT32_MAX};
+
+- if (info[2]->BooleanValue()) {
++ if (info.Length() > 2) {
+ auto maybe_start_point = PointFromJS(info[2]);
+ if (maybe_start_point.IsNothing()) return;
+ start_point = maybe_start_point.FromJust();
+ }
+
+- if (info[3]->BooleanValue()) {
++ if (info.Length() > 3) {
+ auto maybe_end_point = PointFromJS(info[3]);
+ if (maybe_end_point.IsNothing()) return;
+ end_point = maybe_end_point.FromJust();
+@@ -606,7 +616,7 @@ static void ChildNodesForFieldId(const Nan::FunctionCallbackInfo<Value> &info) {
+ Nan::ThrowTypeError("Second argument must be an integer");
+ return;
+ }
+- uint32_t field_id = info[1]->Uint32Value();
++ uint32_t field_id = Nan::To<uint32_t>(info[1]).FromJust();
+
+ vector<TSNode> result;
+ ts_tree_cursor_reset(&scratch_cursor, node);
+@@ -631,7 +641,7 @@ static void ChildNodeForFieldId(const Nan::FunctionCallbackInfo<Value> &info) {
+ Nan::ThrowTypeError("Second argument must be an integer");
+ return;
+ }
+- uint32_t field_id = info[1]->Uint32Value();
++ uint32_t field_id = Nan::To<uint32_t>(info[1]).FromJust();
+ MarshalNode(info, tree, ts_node_child_by_field_id(node, field_id));
+ return;
+ }
+@@ -710,16 +720,17 @@ void Init(Local<Object> exports) {
+ };
+
+ for (size_t i = 0; i < length_of_array(methods); i++) {
+- result->Set(
++ Nan::Set(
++ result,
+ Nan::New(methods[i].name).ToLocalChecked(),
+- Nan::New<FunctionTemplate>(methods[i].callback)->GetFunction()
++ Nan::GetFunction(Nan::New<FunctionTemplate>(methods[i].callback)).ToLocalChecked()
+ );
+ }
+
+ module_exports.Reset(exports);
+ setup_transfer_buffer(1);
+
+- exports->Set(Nan::New("NodeMethods").ToLocalChecked(), result);
++ Nan::Set(exports, Nan::New("NodeMethods").ToLocalChecked(), result);
+ }
+
+ } // namespace node_methods
+diff --git a/src/parser.cc b/src/parser.cc
+index 7eddd39..420c7b1 100644
+--- a/src/parser.cc
++++ b/src/parser.cc
+@@ -26,11 +26,8 @@ class CallbackInput {
+ : callback(callback),
+ byte_offset(0),
+ partial_string_offset(0) {
+- if (js_buffer_size->IsUint32()) {
+- buffer.resize(Local<Integer>::Cast(js_buffer_size)->Uint32Value());
+- } else {
+- buffer.resize(32 * 1024);
+- }
++ uint32_t buffer_size = Nan::To<uint32_t>(js_buffer_size).FromMaybe(32 * 1024);
++ buffer.resize(buffer_size);
+ }
+
+ TSInput Input() {
+@@ -51,8 +48,9 @@ class CallbackInput {
+ reader->partial_string.Reset();
+ }
+
++ *bytes_read = 0;
+ Local<String> result;
+- uint32_t start;
++ uint32_t start = 0;
+ if (reader->partial_string_offset) {
+ result = Nan::New(reader->partial_string);
+ start = reader->partial_string_offset;
+@@ -61,18 +59,26 @@ class CallbackInput {
+ uint32_t utf16_unit = byte / 2;
+ Local<Value> argv[2] = { Nan::New<Number>(utf16_unit), PointToJS(position) };
+ TryCatch try_catch(Isolate::GetCurrent());
+- auto result_value = callback->Call(Nan::Null(), 2, argv);
+- if (!try_catch.HasCaught() && result_value->IsString()) {
+- result = Local<String>::Cast(result_value);
+- start = 0;
+- } else {
+- *bytes_read = 0;
+- start = 0;
+- return "";
+- }
++ auto maybe_result_value = Nan::Call(callback, callback->CreationContext()->Global(), 2, argv);
++ if (try_catch.HasCaught()) return nullptr;
++
++ Local<Value> result_value;
++ if (!maybe_result_value.ToLocal(&result_value)) return nullptr;
++ if (!Nan::To<String>(result_value).ToLocal(&result)) return nullptr;
+ }
+
+- int utf16_units_read = result->Write(reader->buffer.data(), start, reader->buffer.size(), 2);
++ int utf16_units_read = result->Write(
++
++ // Nan doesn't wrap this functionality
++ #if NODE_MAJOR_VERSION >= 12
++ Isolate::GetCurrent(),
++ #endif
++
++ reader->buffer.data(),
++ start,
++ reader->buffer.size(),
++ 2
++ );
+ int end = start + utf16_units_read;
+ *bytes_read = 2 * utf16_units_read;
+
+@@ -173,9 +179,9 @@ void Parser::Init(Local<Object> exports) {
+ Nan::SetPrototypeMethod(tpl, methods[i].name, methods[i].callback);
+ }
+
+- constructor.Reset(Nan::Persistent<Function>(tpl->GetFunction()));
+- exports->Set(class_name, Nan::New(constructor));
+- exports->Set(Nan::New("LANGUAGE_VERSION").ToLocalChecked(), Nan::New<Number>(TREE_SITTER_LANGUAGE_VERSION));
++ constructor.Reset(Nan::Persistent<Function>(Nan::GetFunction(tpl).ToLocalChecked()));
++ Nan::Set(exports, class_name, Nan::New(constructor));
++ Nan::Set(exports, Nan::New("LANGUAGE_VERSION").ToLocalChecked(), Nan::New<Number>(TREE_SITTER_LANGUAGE_VERSION));
+ }
+
+ Parser::Parser() : parser_(ts_parser_new()), is_parsing_async_(false) {}
+@@ -188,7 +194,9 @@ static bool handle_included_ranges(TSParser *parser, Local<Value> arg) {
+ auto js_included_ranges = Local<Array>::Cast(arg);
+ vector<TSRange> included_ranges;
+ for (unsigned i = 0; i < js_included_ranges->Length(); i++) {
+- auto maybe_range = RangeFromJS(js_included_ranges->Get(i));
++ Local<Value> range_value;
++ if (!Nan::Get(js_included_ranges, i).ToLocal(&range_value)) return false;
++ auto maybe_range = RangeFromJS(range_value);
+ if (!maybe_range.IsJust()) return false;
+ auto range = maybe_range.FromJust();
+ if (range.start_byte < last_included_range_end) {
+@@ -250,9 +258,10 @@ void Parser::Parse(const Nan::FunctionCallbackInfo<Value> &info) {
+
+ Local<Function> callback = Local<Function>::Cast(info[0]);
+
++ Local<Object> js_old_tree;
+ const TSTree *old_tree = nullptr;
+- if (info.Length() > 1 && info[1]->BooleanValue()) {
+- const Tree *tree = Tree::UnwrapTree(info[1]);
++ if (info.Length() > 1 && Nan::To<Object>(info[1]).ToLocal(&js_old_tree)) {
++ const Tree *tree = Tree::UnwrapTree(js_old_tree);
+ if (!tree) {
+ Nan::ThrowTypeError("Second argument must be a tree");
+ return;
+@@ -305,9 +314,10 @@ void Parser::ParseTextBuffer(const Nan::FunctionCallbackInfo<Value> &info) {
+ return;
+ }
+
++ Local<Object> js_old_tree;
+ const TSTree *old_tree = nullptr;
+- if (info.Length() > 2 && info[2]->BooleanValue()) {
+- const Tree *tree = Tree::UnwrapTree(info[2]);
++ if (info.Length() > 2 && Nan::To<Object>(info[2]).ToLocal(&js_old_tree)) {
++ const Tree *tree = Tree::UnwrapTree(js_old_tree);
+ if (!tree) {
+ Nan::ThrowTypeError("Second argument must be a tree");
+ return;
+@@ -322,18 +332,21 @@ void Parser::ParseTextBuffer(const Nan::FunctionCallbackInfo<Value> &info) {
+
+ // If a `syncTimeoutMicros` option is passed, parse synchronously
+ // for the given amount of time before queuing an async task.
+- if (info[4]->BooleanValue()) {
+- double js_sync_timeout = info[4]->NumberValue();
++ double js_sync_timeout = Nan::To<double>(info[4]).FromMaybe(-1);
++ if (js_sync_timeout > 0) {
+ size_t sync_timeout;
+
+ // If the timeout is `Infinity`, then parse synchronously with no timeout.
+- if (js_sync_timeout > 0 && !std::isfinite(js_sync_timeout)) {
++ if (js_sync_timeout && !std::isfinite(js_sync_timeout)) {
+ sync_timeout = 0;
+- } else if (info[4]->IsUint32()) {
+- sync_timeout = info[4]->Uint32Value();
+ } else {
+- Nan::ThrowTypeError("The `syncTimeoutMicros` option must be a positive integer.");
+- return;
++ auto maybe_sync_timeout = Nan::To<uint32_t>(info[4]);
++ if (maybe_sync_timeout.IsJust()) {
++ sync_timeout = maybe_sync_timeout.FromJust();
++ } else {
++ Nan::ThrowTypeError("The `syncTimeoutMicros` option must be a positive integer.");
++ return;
++ }
+ }
+
+ // Logging is disabled for this method, because we can't call the
+@@ -348,7 +361,8 @@ void Parser::ParseTextBuffer(const Nan::FunctionCallbackInfo<Value> &info) {
+ if (result) {
+ delete input;
+ Local<Value> argv[] = {Tree::NewInstance(result)};
+- info[0].As<Function>()->Call(Nan::Null(), 1, argv);
++ auto callback = info[0].As<Function>();
++ Nan::Call(callback, callback->CreationContext()->Global(), 1, argv);
+ return;
+ }
+ }
+@@ -369,9 +383,10 @@ void Parser::ParseTextBufferSync(const Nan::FunctionCallbackInfo<Value> &info) {
+ return;
+ }
+
+- TSTree *old_tree = nullptr;
+- if (info.Length() > 1 && info[1]->BooleanValue()) {
+- const Tree *tree = Tree::UnwrapTree(info[1]);
++ Local<Object> js_old_tree;
++ const TSTree *old_tree = nullptr;
++ if (info.Length() > 1 && Nan::To<Object>(info[1]).ToLocal(&js_old_tree)) {
++ const Tree *tree = Tree::UnwrapTree(js_old_tree);
+ if (!tree) {
+ Nan::ThrowTypeError("Second argument must be a tree");
+ return;
+@@ -411,7 +426,7 @@ void Parser::SetLogger(const Nan::FunctionCallbackInfo<Value> &info) {
+ if (info[0]->IsFunction()) {
+ if (current_logger.payload) delete (Logger *)current_logger.payload;
+ ts_parser_set_logger(parser->parser_, Logger::Make(Local<Function>::Cast(info[0])));
+- } else if (!info[0]->BooleanValue()) {
++ } else if (!Nan::To<bool>(info[0]).FromMaybe(true)) {
+ if (current_logger.payload) delete (Logger *)current_logger.payload;
+ ts_parser_set_logger(parser->parser_, { 0, 0 });
+ } else {
+@@ -429,9 +444,7 @@ void Parser::PrintDotGraphs(const Nan::FunctionCallbackInfo<Value> &info) {
+ return;
+ }
+
+- Local<Boolean> value = Local<Boolean>::Cast(info[0]);
+-
+- if (value->IsBoolean() && value->BooleanValue()) {
++ if (Nan::To<bool>(info[0]).FromMaybe(false)) {
+ ts_parser_print_dot_graphs(parser->parser_, 2);
+ } else {
+ ts_parser_print_dot_graphs(parser->parser_, -1);
+diff --git a/src/tree.cc b/src/tree.cc
+index c41437a..2800075 100644
+--- a/src/tree.cc
++++ b/src/tree.cc
+@@ -34,11 +34,11 @@ void Tree::Init(Local<Object> exports) {
+ Nan::SetPrototypeMethod(tpl, methods[i].name, methods[i].callback);
+ }
+
+- Local<Function> ctor = tpl->GetFunction();
++ Local<Function> ctor = Nan::GetFunction(tpl).ToLocalChecked();
+
+ constructor_template.Reset(tpl);
+ constructor.Reset(ctor);
+- exports->Set(class_name, ctor);
++ Nan::Set(exports, class_name, ctor);
+ }
+
+ Tree::Tree(TSTree *tree) : tree_(tree) {}
+@@ -53,10 +53,14 @@ Tree::~Tree() {
+ Local<Value> Tree::NewInstance(TSTree *tree) {
+ if (tree) {
+ Local<Object> self;
+- MaybeLocal<Object> maybe_self = Nan::New(constructor)->NewInstance(Nan::GetCurrentContext());
++ printf("NEW INSTANCE TIME %d\n", Nan::New(constructor)->IsFunction());
++ MaybeLocal<Object> maybe_self = Nan::NewInstance(Nan::New(constructor));
+ if (maybe_self.ToLocal(&self)) {
++ puts("GOT A LOCAL");
+ (new Tree(tree))->Wrap(self);
+ return self;
++ } else {
++ puts("DID NOT GOT A LOCAL");
+ }
+ }
+ return Nan::Null();
+@@ -70,14 +74,17 @@ const Tree *Tree::UnwrapTree(const Local<Value> &value) {
+ }
+
+ void Tree::New(const Nan::FunctionCallbackInfo<Value> &info) {
+- info.GetReturnValue().Set(Nan::Null());
++ printf("IS CONSTRUCT CALL %d\n", info.IsConstructCall());
++ info.GetReturnValue().Set(info.This());
+ }
+
+ #define read_number_from_js(out, value, name) \
+- if (!(value)->IsUint32()) { \
++ maybe_number = Nan::To<uint32_t>(value); \
++ if (maybe_number.IsNothing()) { \
+ Nan::ThrowTypeError(name " must be an integer"); \
++ return; \
+ } \
+- *(out) = (value)->Uint32Value()
++ *(out) = maybe_number.FromJust();
+
+ #define read_byte_count_from_js(out, value, name) \
+ read_number_from_js(out, value, name); \
+@@ -87,6 +94,7 @@ void Tree::Edit(const Nan::FunctionCallbackInfo<Value> &info) {
+ Tree *tree = ObjectWrap::Unwrap<Tree>(info.This());
+
+ TSInputEdit edit;
++ Nan::Maybe<uint32_t> maybe_number = Nan::Nothing<uint32_t>();
+ read_number_from_js(&edit.start_point.row, info[0], "startPosition.row");
+ read_byte_count_from_js(&edit.start_point.column, info[1], "startPosition.column");
+ read_number_from_js(&edit.old_end_point.row, info[2], "oldEndPosition.row");
+@@ -104,13 +112,16 @@ void Tree::Edit(const Nan::FunctionCallbackInfo<Value> &info) {
+ TSNode node;
+ node.id = entry.first;
+ for (unsigned i = 0; i < 4; i++) {
+- node.context[i] = js_node->Get(i + 2)->Uint32Value();
++ Local<Value> node_field;
++ if (Nan::Get(js_node, i + 2).ToLocal(&node_field)) {
++ node.context[i] = Nan::To<uint32_t>(node_field).FromMaybe(0);
++ }
+ }
+
+ ts_node_edit(&node, &edit);
+
+ for (unsigned i = 0; i < 4; i++) {
+- js_node->Set(i + 2, Nan::New(node.context[i]));
++ Nan::Set(js_node, i + 2, Nan::New(node.context[i]));
+ }
+ }
+
+@@ -135,7 +146,7 @@ void Tree::GetChangedRanges(const Nan::FunctionCallbackInfo<Value> &info) {
+
+ Local<Array> result = Nan::New<Array>();
+ for (size_t i = 0; i < range_count; i++) {
+- result->Set(i, RangeToJS(ranges[i]));
++ Nan::Set(result, i, RangeToJS(ranges[i]));
+ }
+
+ info.GetReturnValue().Set(result);
+@@ -197,7 +208,6 @@ void Tree::PrintDotGraph(const Nan::FunctionCallbackInfo<Value> &info) {
+
+ static void FinalizeNode(const v8::WeakCallbackInfo<Tree::NodeCacheEntry> &info) {
+ Tree::NodeCacheEntry *cache_entry = info.GetParameter();
+- assert(cache_entry->node.IsNearDeath());
+ assert(!cache_entry->node.IsEmpty());
+ cache_entry->node.Reset();
+ if (cache_entry->tree) {
+@@ -211,9 +221,12 @@ void Tree::CacheNode(const Nan::FunctionCallbackInfo<Value> &info) {
+ Tree *tree = ObjectWrap::Unwrap<Tree>(info.This());
+ Local<Object> js_node = Local<Object>::Cast(info[0]);
+
++ Local<Value> js_node_field1, js_node_field2;
++ if (!Nan::Get(js_node, 0).ToLocal(&js_node_field1)) return;
++ if (!Nan::Get(js_node, 1).ToLocal(&js_node_field2)) return;
+ uint32_t key_parts[2] = {
+- js_node->Get(0)->Uint32Value(),
+- js_node->Get(1)->Uint32Value(),
++ Nan::To<uint32_t>(js_node_field1).FromMaybe(0),
++ Nan::To<uint32_t>(js_node_field2).FromMaybe(0)
+ };
+ const void *key = UnmarshalNodeId(key_parts);
+
+diff --git a/src/tree_cursor.cc b/src/tree_cursor.cc
+index 332a14b..a1bb741 100644
+--- a/src/tree_cursor.cc
++++ b/src/tree_cursor.cc
+@@ -49,8 +49,8 @@ void TreeCursor::Init(v8::Local<v8::Object> exports) {
+ Nan::SetPrototypeMethod(tpl, methods[i].name, methods[i].callback);
+ }
+
+- Local<Function> constructor_local = tpl->GetFunction();
+- exports->Set(class_name, constructor_local);
++ Local<Function> constructor_local = Nan::GetFunction(tpl).ToLocalChecked();
++ Nan::Set(exports, class_name, constructor_local);
+ constructor.Reset(Nan::Persistent<Function>(constructor_local));
+ }
+
+@@ -87,10 +87,12 @@ void TreeCursor::GotoFirstChild(const Nan::FunctionCallbackInfo<Value> &info) {
+
+ void TreeCursor::GotoFirstChildForIndex(const Nan::FunctionCallbackInfo<Value> &info) {
+ TreeCursor *cursor = Nan::ObjectWrap::Unwrap<TreeCursor>(info.This());
+- if (!info[0]->IsUint32()) {
++ auto maybe_index = Nan::To<uint32_t>(info[0]);
++ if (maybe_index.IsNothing()) {
+ Nan::ThrowTypeError("Argument must be an integer");
++ return;
+ }
+- uint32_t goal_byte = info[0]->Uint32Value() * 2;
++ uint32_t goal_byte = maybe_index.FromJust() * 2;
+ int64_t child_index = ts_tree_cursor_goto_first_child_for_byte(&cursor->cursor_, goal_byte);
+ if (child_index < 0) {
+ info.GetReturnValue().Set(Nan::Null());
+@@ -120,7 +122,7 @@ void TreeCursor::EndPosition(const Nan::FunctionCallbackInfo<Value> &info) {
+ void TreeCursor::CurrentNode(const Nan::FunctionCallbackInfo<Value> &info) {
+ TreeCursor *cursor = Nan::ObjectWrap::Unwrap<TreeCursor>(info.This());
+ Local<String> key = Nan::New<String>("tree").ToLocalChecked();
+- const Tree *tree = Tree::UnwrapTree(info.This()->Get(key));
++ const Tree *tree = Tree::UnwrapTree(Nan::Get(info.This(), key).ToLocalChecked());
+ TSNode node = ts_tree_cursor_current_node(&cursor->cursor_);
+ node_methods::MarshalNode(info, tree, node);
+ }
+@@ -128,7 +130,7 @@ void TreeCursor::CurrentNode(const Nan::FunctionCallbackInfo<Value> &info) {
+ void TreeCursor::Reset(const Nan::FunctionCallbackInfo<Value> &info) {
+ TreeCursor *cursor = Nan::ObjectWrap::Unwrap<TreeCursor>(info.This());
+ Local<String> key = Nan::New<String>("tree").ToLocalChecked();
+- const Tree *tree = Tree::UnwrapTree(info.This()->Get(key));
++ const Tree *tree = Tree::UnwrapTree(Nan::Get(info.This(), key).ToLocalChecked());
+ TSNode node = node_methods::UnmarshalNode(tree);
+ ts_tree_cursor_reset(&cursor->cursor_, node);
+ }
+diff --git a/test/node_test.js b/test/node_test.js
+index 6455a9f..643ab3e 100644
+--- a/test/node_test.js
++++ b/test/node_test.js
+@@ -53,7 +53,7 @@ describe("Node", () => {
+ });
+
+ describe(".children", () => {
+- it("returns an array of child nodes", () => {
++ it.only("returns an array of child nodes", () => {
+ const tree = parser.parse("x10 + 1000");
+ assert.equal(1, tree.rootNode.children.length);
+ const sumNode = tree.rootNode.firstChild.firstChild;
+diff --git a/test/parser_test.js b/test/parser_test.js
+index 1645104..a1f6d17 100644
+--- a/test/parser_test.js
++++ b/test/parser_test.js
+@@ -100,7 +100,7 @@ describe("Parser", () => {
+
+ it("reads from the given input", () => {
+ const parts = ["first", "_", "second", "_", "third"];
+- const tree = parser.parse(() => parts.shift());
++ const tree = parser.parse((index) => parts.shift());
+ assert.equal(tree.rootNode.toString(), "(program (expression_statement (identifier)))");
+ });
+
+--
+2.23.0
+
Deleted: PKGBUILD
===================================================================
--- PKGBUILD 2019-12-23 14:11:00 UTC (rev 539242)
+++ PKGBUILD 2019-12-23 14:11:05 UTC (rev 539243)
@@ -1,32 +0,0 @@
-# Maintainer: Felix Yan <felixonmars at archlinux.org>
-# Maintainer: Maxim Baz <$pkgname at maximbaz dot com>
-
-pkgname=bash-language-server
-pkgver=1.7.0
-pkgrel=1
-pkgdesc="Bash language server implementation based on Tree Sitter and its grammar for Bash"
-arch=("x86_64")
-url="https://github.com/mads-hartmann/bash-language-server"
-license=("MIT")
-depends=("nodejs" "acorn")
-makedepends=("yarn" "typescript" "python2" "git")
-source=("https://github.com/mads-hartmann/$pkgname/archive/server-$pkgver.tar.gz")
-sha512sums=('56368fa366117cc7ce8f00d5cc05a40805941b9b20c53e961f6338c275974719ba095999cccd0da9723984f1d44256b592dc1433460ea9e50e23413ceb8a6d48')
-
-build() {
- cd "$srcdir/$pkgname-server-$pkgver"
- yarn
- cd server
- PYTHON=python2 yarn run compile
-}
-
-package() {
- install -d "$pkgdir/usr/lib/$pkgname"
- cd "$pkgdir/usr/lib/$pkgname"
- cp -a "$srcdir/$pkgname-server-$pkgver/server/"* .
-
- rm -r node_modules/acorn
-
- install -d "$pkgdir/usr/bin"
- ln -s "/usr/lib/$pkgname/bin/main.js" "$pkgdir/usr/bin/$pkgname"
-}
Copied: bash-language-server/repos/community-x86_64/PKGBUILD (from rev 539242, bash-language-server/trunk/PKGBUILD)
===================================================================
--- PKGBUILD (rev 0)
+++ PKGBUILD 2019-12-23 14:11:05 UTC (rev 539243)
@@ -0,0 +1,32 @@
+# Maintainer: Felix Yan <felixonmars at archlinux.org>
+# Maintainer: Maxim Baz <$pkgname at maximbaz dot com>
+
+pkgname=bash-language-server
+pkgver=1.7.0
+pkgrel=2
+pkgdesc="Bash language server implementation based on Tree Sitter and its grammar for Bash"
+arch=("x86_64")
+url="https://github.com/mads-hartmann/bash-language-server"
+license=("MIT")
+depends=("nodejs" "acorn")
+makedepends=("yarn" "typescript" "git")
+source=("https://github.com/mads-hartmann/$pkgname/archive/server-$pkgver.tar.gz")
+sha512sums=('56368fa366117cc7ce8f00d5cc05a40805941b9b20c53e961f6338c275974719ba095999cccd0da9723984f1d44256b592dc1433460ea9e50e23413ceb8a6d48')
+
+build() {
+ cd "$srcdir/$pkgname-server-$pkgver"
+ yarn
+ cd server
+ yarn run compile
+}
+
+package() {
+ install -d "$pkgdir/usr/lib/$pkgname"
+ cd "$pkgdir/usr/lib/$pkgname"
+ cp -a "$srcdir/$pkgname-server-$pkgver/server/"* .
+
+ rm -r node_modules/acorn
+
+ install -d "$pkgdir/usr/bin"
+ ln -s "/usr/lib/$pkgname/bin/main.js" "$pkgdir/usr/bin/$pkgname"
+}
Deleted: bash-language-server-nodejs-12-update.patch
===================================================================
--- bash-language-server-nodejs-12-update.patch 2019-12-23 14:11:00 UTC (rev 539242)
+++ bash-language-server-nodejs-12-update.patch 2019-12-23 14:11:05 UTC (rev 539243)
@@ -1,15 +0,0 @@
-diff --git a/server/package.json b/server/package.json
-index 88ed86a..cc71988 100644
---- a/server/package.json
-+++ b/server/package.json
-@@ -20,8 +20,8 @@
- "glob": "^7.1.2",
- "request": "^2.83.0",
- "request-promise-native": "^1.0.5",
-- "tree-sitter": "^0.13.22",
-- "tree-sitter-bash": "^0.13.7",
-+ "tree-sitter": "file:../../tree-sitter-0.15.8.tgz",
-+ "tree-sitter-bash": "^0.16.0",
- "turndown": "^4.0.2",
- "urijs": "^1.19.1",
- "vscode-languageserver": "^4.1.1"
Copied: bash-language-server/repos/community-x86_64/bash-language-server-nodejs-12-update.patch (from rev 539242, bash-language-server/trunk/bash-language-server-nodejs-12-update.patch)
===================================================================
--- bash-language-server-nodejs-12-update.patch (rev 0)
+++ bash-language-server-nodejs-12-update.patch 2019-12-23 14:11:05 UTC (rev 539243)
@@ -0,0 +1,15 @@
+diff --git a/server/package.json b/server/package.json
+index 88ed86a..cc71988 100644
+--- a/server/package.json
++++ b/server/package.json
+@@ -20,8 +20,8 @@
+ "glob": "^7.1.2",
+ "request": "^2.83.0",
+ "request-promise-native": "^1.0.5",
+- "tree-sitter": "^0.13.22",
+- "tree-sitter-bash": "^0.13.7",
++ "tree-sitter": "file:../../tree-sitter-0.15.8.tgz",
++ "tree-sitter-bash": "^0.16.0",
+ "turndown": "^4.0.2",
+ "urijs": "^1.19.1",
+ "vscode-languageserver": "^4.1.1"
More information about the arch-commits
mailing list