Minor changes
@ -404,32 +404,32 @@ clientkeys = gears.table.join(
|
||||
awful.key({ modkey, }, "o", function (c) c:move_to_screen() end,
|
||||
{description = "move to screen", group = "client"}),
|
||||
awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end,
|
||||
{description = "toggle keep on top", group = "client"})
|
||||
-- awful.key({ modkey, }, "n",
|
||||
-- function (c)
|
||||
-- -- The client currently has the input focus, so it cannot be
|
||||
-- -- minimized, since minimized clients can't have the focus.
|
||||
-- c.minimized = true
|
||||
-- end ,
|
||||
-- {description = "minimize", group = "client"}),
|
||||
-- awful.key({ modkey, }, "m",
|
||||
-- function (c)
|
||||
-- c.maximized = not c.maximized
|
||||
-- c:raise()
|
||||
-- end ,
|
||||
-- {description = "(un)maximize", group = "client"}),
|
||||
-- awful.key({ modkey, "Control" }, "m",
|
||||
-- function (c)
|
||||
-- c.maximized_vertical = not c.maximized_vertical
|
||||
-- c:raise()
|
||||
-- end ,
|
||||
-- {description = "(un)maximize vertically", group = "client"}),
|
||||
-- awful.key({ modkey, "Shift" }, "m",
|
||||
-- function (c)
|
||||
-- c.maximized_horizontal = not c.maximized_horizontal
|
||||
-- c:raise()
|
||||
-- end ,
|
||||
-- {description = "(un)maximize horizontally", group = "client"})
|
||||
{description = "toggle keep on top", group = "client"}),
|
||||
awful.key({ modkey, }, "n",
|
||||
function (c)
|
||||
-- The client currently has the input focus, so it cannot be
|
||||
-- minimized, since minimized clients can't have the focus.
|
||||
c.minimized = true
|
||||
end ,
|
||||
{description = "minimize", group = "client"}),
|
||||
awful.key({ modkey, }, "m",
|
||||
function (c)
|
||||
c.maximized = not c.maximized
|
||||
c:raise()
|
||||
end ,
|
||||
{description = "(un)maximize", group = "client"}),
|
||||
awful.key({ modkey, "Control" }, "m",
|
||||
function (c)
|
||||
c.maximized_vertical = not c.maximized_vertical
|
||||
c:raise()
|
||||
end ,
|
||||
{description = "(un)maximize vertically", group = "client"}),
|
||||
awful.key({ modkey, "Shift" }, "m",
|
||||
function (c)
|
||||
c.maximized_horizontal = not c.maximized_horizontal
|
||||
c:raise()
|
||||
end ,
|
||||
{description = "(un)maximize horizontally", group = "client"})
|
||||
)
|
||||
|
||||
-- Bind all key numbers to tags.
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
# List available modules with "fastfetch --list-modules".
|
||||
# Get the default structure with "fastfetch --print-structure".
|
||||
# --structure Title:Separator:OS:Host:Kernel:Uptime:Packages:Shell:Resolution:DE:WM:WMTheme:Theme:Icons:Font:Cursor:Terminal:TerminalFont:CPU:GPU:Memory:Disk:Battery:Locale:Break:Colors
|
||||
--structure Title:Separator:OS:Host:Kernel:Uptime:Packages:Resolution:DE:WM:WMTheme:Theme:Icons:CPU:GPU:Memory:Disk:Battery:Player:Song:Break
|
||||
--structure Title:Separator:OS:Host:Kernel:Uptime:Packages:Resolution:DE:WM:WMTheme:Theme:Icons:CPU:GPU:Memory:Disk:Battery:Song:Break
|
||||
|
||||
# Multithreading option:
|
||||
# Sets if fastfetch should use multiple threads to detect the values.
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
|
||||
<Metadata>
|
||||
<Identity Language="en-US" Id="rainbow-csv" Version="2.2.0" Publisher="mechatroner" />
|
||||
<Identity Language="en-US" Id="rainbow-csv" Version="2.3.0" Publisher="mechatroner" />
|
||||
<DisplayName>Rainbow CSV</DisplayName>
|
||||
<Description xml:space="preserve">Highlight CSV and TSV files, Run SQL-like queries</Description>
|
||||
<Tags>csv,tsv,highlight,CSV,__ext_csv,TSV,__ext_tsv,__ext_tab,csv (pipe),CSV (pipe),csv (tilde),CSV (tilde),csv (whitespace),CSV (whitespace),csv (caret),CSV (caret),csv (colon),CSV (colon),csv (double quote),CSV (double quote),csv (equals),CSV (equals),csv (dot),CSV (dot),csv (hyphen),CSV (hyphen),csv (semicolon),CSV (semicolon),rainbow hover markup,plaintext,sql,__web_extension</Tags>
|
||||
@ -1,5 +1,9 @@
|
||||
# Rainbow CSV for Visual Studio Code Change Log
|
||||
|
||||
## 2.3.0
|
||||
* Improve alignment algorithm: special handling of numeric columns, see [#106](https://github.com/mechatroner/vscode_rainbow_csv/issues/106).
|
||||
* Show alignment progress indicator which is very nice for large files.
|
||||
|
||||
## 2.2.0
|
||||
* UI and UX improvements by [@anthroid](https://github.com/anthroid).
|
||||
|
||||
1
vscodium/extensions/mechatroner.rainbow-csv-2.3.0/dist/web/extension.js
vendored
Normal file
1
vscodium/extensions/mechatroner.rainbow-csv-2.3.0/dist/web/extension.js.map
vendored
Normal file
2
vscodium/extensions/mechatroner.rainbow-csv-2.3.0/dist/web/test/suite/index.js
vendored
Normal file
1
vscodium/extensions/mechatroner.rainbow-csv-2.3.0/dist/web/test/suite/index.js.map
vendored
Normal file
@ -103,6 +103,11 @@ function sleep(ms) {
|
||||
}
|
||||
|
||||
|
||||
async function push_current_stack_to_js_callback_queue_to_allow_ui_update() {
|
||||
await sleep(0);
|
||||
}
|
||||
|
||||
|
||||
function map_separator_to_language_id(separator) {
|
||||
for (let language_id in dialect_map) {
|
||||
if (!dialect_map.hasOwnProperty(language_id))
|
||||
@ -142,6 +147,13 @@ function get_rfc_record_text(document, record_start, record_end) {
|
||||
}
|
||||
|
||||
|
||||
async function replace_doc_content(active_editor, active_doc, new_content) {
|
||||
let invalid_range = new vscode.Range(0, 0, active_doc.lineCount /* Intentionally missing the '-1' */, 0);
|
||||
let full_range = active_doc.validateRange(invalid_range);
|
||||
await active_editor.edit(edit => edit.replace(full_range, new_content));
|
||||
}
|
||||
|
||||
|
||||
function sample_preview_records_from_context(rbql_context, dst_message) {
|
||||
let document = rbql_context.input_document;
|
||||
let delim = rbql_context.delim;
|
||||
@ -204,9 +216,14 @@ function make_with_headers_key(file_path) {
|
||||
}
|
||||
|
||||
|
||||
function get_header_from_document(document, delim, policy) {
|
||||
function get_from_config(param_name, default_value) {
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let comment_prefix = config ? config.get('comment_prefix') : '';
|
||||
return config ? config.get(param_name) : default_value;
|
||||
}
|
||||
|
||||
|
||||
function get_header_from_document(document, delim, policy) {
|
||||
let comment_prefix = get_from_config('comment_prefix', '');
|
||||
let header_line = ll_rainbow_utils().get_header_line(document, comment_prefix);
|
||||
return csv_utils.smart_split(header_line, delim, policy, /*preserve_quotes_and_whitespaces=*/false)[0];
|
||||
}
|
||||
@ -243,8 +260,7 @@ function make_hover_text(document, position, language_id, enable_tooltip_column_
|
||||
var cnum = position.character;
|
||||
var line = document.lineAt(lnum).text;
|
||||
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let comment_prefix = config ? config.get('comment_prefix') : '';
|
||||
let comment_prefix = get_from_config('comment_prefix', '');
|
||||
if (comment_prefix && line.startsWith(comment_prefix))
|
||||
return 'Comment';
|
||||
|
||||
@ -282,13 +298,11 @@ function make_hover(document, position, language_id, cancellation_token) {
|
||||
if (last_statusbar_doc != document) {
|
||||
refresh_status_bar_buttons(document); // Being paranoid and making sure that the buttons are visible.
|
||||
}
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
if (!config)
|
||||
if (!get_from_config('enable_tooltip', false)) {
|
||||
return;
|
||||
if (!config.get('enable_tooltip'))
|
||||
return;
|
||||
let enable_tooltip_column_names = config.get('enable_tooltip_column_names');
|
||||
let enable_tooltip_warnings = config.get('enable_tooltip_warnings');
|
||||
}
|
||||
let enable_tooltip_column_names = get_from_config('enable_tooltip_column_names', false);
|
||||
let enable_tooltip_warnings = get_from_config('enable_tooltip_warnings', false);
|
||||
var hover_text = make_hover_text(document, position, language_id, enable_tooltip_column_names, enable_tooltip_warnings);
|
||||
if (hover_text && !cancellation_token.isCancellationRequested) {
|
||||
let mds = null;
|
||||
@ -305,9 +319,9 @@ function make_hover(document, position, language_id, cancellation_token) {
|
||||
}
|
||||
|
||||
|
||||
function produce_lint_report(active_doc, delim, policy, config) {
|
||||
let comment_prefix = config.get('comment_prefix');
|
||||
let detect_trailing_spaces = config.get('csv_lint_detect_trailing_spaces');
|
||||
function produce_lint_report(active_doc, delim, policy) {
|
||||
let comment_prefix = get_from_config('comment_prefix', '');
|
||||
let detect_trailing_spaces = get_from_config('csv_lint_detect_trailing_spaces', false);
|
||||
let first_trailing_space_line = null;
|
||||
var num_lines = active_doc.lineCount;
|
||||
var num_fields = null;
|
||||
@ -487,17 +501,13 @@ function csv_lint(active_doc, is_manual_op) {
|
||||
if (!is_manual_op) {
|
||||
if (lint_results.has(lint_cache_key))
|
||||
return null;
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
if (config && config.get('enable_auto_csv_lint') === false)
|
||||
if (!get_from_config('enable_auto_csv_lint', false))
|
||||
return null;
|
||||
}
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
if (!config)
|
||||
return null;
|
||||
lint_results.set(lint_cache_key, 'Processing...');
|
||||
refresh_status_bar_buttons(active_doc); // Visual feedback.
|
||||
let [delim, policy] = dialect_map[language_id];
|
||||
var lint_report = produce_lint_report(active_doc, delim, policy, config);
|
||||
var lint_report = produce_lint_report(active_doc, delim, policy);
|
||||
lint_results.set(lint_cache_key, lint_report);
|
||||
return lint_report;
|
||||
}
|
||||
@ -647,16 +657,14 @@ function file_path_to_query_key(file_path) {
|
||||
}
|
||||
|
||||
function get_dst_table_dir(input_table_path) {
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
if (!config)
|
||||
let rbql_output_dir = get_from_config('rbql_output_dir', 'TMP')
|
||||
if (rbql_output_dir == 'TMP') {
|
||||
return os.tmpdir();
|
||||
if (config.get('rbql_output_dir') == 'TMP') {
|
||||
return os.tmpdir();
|
||||
} else if (config.get('rbql_output_dir') == 'INPUT') {
|
||||
} else if (rbql_output_dir == 'INPUT') {
|
||||
return path.dirname(input_table_path);
|
||||
} else {
|
||||
// If the directory does not exist or isn't writable RBQL itself will report more or less clear error.
|
||||
return config.get('rbql_output_dir');
|
||||
// Return custom directory. If the directory does not exist or isn't writable RBQL itself will report more or less clear error.
|
||||
return rbql_output_dir;
|
||||
}
|
||||
}
|
||||
|
||||
@ -869,10 +877,7 @@ async function column_edit(edit_mode) {
|
||||
let dialect = get_dialect(active_doc);
|
||||
let delim = dialect[0];
|
||||
let policy = dialect[1];
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
if (!config)
|
||||
return;
|
||||
let comment_prefix = config.get('comment_prefix');
|
||||
let comment_prefix = get_from_config('comment_prefix', '');
|
||||
|
||||
let position = active_editor.selection.active;
|
||||
let lnum = position.line;
|
||||
@ -939,7 +944,8 @@ async function column_edit(edit_mode) {
|
||||
}
|
||||
|
||||
|
||||
async function shrink_table(active_editor, edit_builder) {
|
||||
async function shrink_table() {
|
||||
let active_editor = get_active_editor();
|
||||
let active_doc = get_active_doc(active_editor);
|
||||
if (!active_doc)
|
||||
return;
|
||||
@ -947,7 +953,12 @@ async function shrink_table(active_editor, edit_builder) {
|
||||
if (!dialect_map.hasOwnProperty(language_id))
|
||||
return;
|
||||
let [delim, policy] = dialect_map[language_id];
|
||||
let [shrinked_doc_text, first_failed_line] = ll_rainbow_utils().shrink_columns(active_doc, delim, policy);
|
||||
let comment_prefix = get_from_config('comment_prefix', '');
|
||||
let progress_options = {location: vscode.ProgressLocation.Window, title: 'Rainbow CSV'};
|
||||
await vscode.window.withProgress(progress_options, async (progress) => {
|
||||
progress.report({message: 'Preparing'});
|
||||
await push_current_stack_to_js_callback_queue_to_allow_ui_update();
|
||||
let [shrinked_doc_text, first_failed_line] = ll_rainbow_utils().shrink_columns(active_doc, delim, policy, comment_prefix);
|
||||
if (first_failed_line) {
|
||||
show_single_line_error(`Unable to shrink: Inconsistent double quotes at line ${first_failed_line}`);
|
||||
return;
|
||||
@ -958,13 +969,15 @@ async function shrink_table(active_editor, edit_builder) {
|
||||
vscode.window.showWarningMessage('No trailing whitespaces found, skipping');
|
||||
return;
|
||||
}
|
||||
let invalid_range = new vscode.Range(0, 0, active_doc.lineCount /* Intentionally missing the '-1' */, 0);
|
||||
let full_range = active_doc.validateRange(invalid_range);
|
||||
edit_builder.replace(full_range, shrinked_doc_text);
|
||||
progress.report({message: 'Shrinking columns'});
|
||||
await push_current_stack_to_js_callback_queue_to_allow_ui_update();
|
||||
await replace_doc_content(active_editor, active_doc, shrinked_doc_text);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async function align_table(active_editor, edit_builder) {
|
||||
async function align_table() {
|
||||
let active_editor = get_active_editor();
|
||||
let active_doc = get_active_doc(active_editor);
|
||||
if (!active_doc)
|
||||
return;
|
||||
@ -972,21 +985,35 @@ async function align_table(active_editor, edit_builder) {
|
||||
if (!dialect_map.hasOwnProperty(language_id))
|
||||
return;
|
||||
let [delim, policy] = dialect_map[language_id];
|
||||
let [column_sizes, first_failed_line] = ll_rainbow_utils().calc_column_sizes(active_doc, delim, policy);
|
||||
let comment_prefix = get_from_config('comment_prefix', '');
|
||||
let progress_options = {location: vscode.ProgressLocation.Window, title: 'Rainbow CSV'};
|
||||
await vscode.window.withProgress(progress_options, async (progress) => {
|
||||
progress.report({message: 'Calculating column statistics'});
|
||||
await push_current_stack_to_js_callback_queue_to_allow_ui_update();
|
||||
let [column_stats, first_failed_line] = ll_rainbow_utils().calc_column_stats(active_doc, delim, policy, comment_prefix);
|
||||
if (first_failed_line) {
|
||||
show_single_line_error(`Unable to align: Inconsistent double quotes at line ${first_failed_line}`);
|
||||
return;
|
||||
}
|
||||
let aligned_doc_text = ll_rainbow_utils().align_columns(active_doc, delim, policy, column_sizes);
|
||||
column_stats = ll_rainbow_utils().adjust_column_stats(column_stats);
|
||||
if (column_stats === null) {
|
||||
show_single_line_error('Unable to allign: Internal Rainbow CSV Error');
|
||||
return;
|
||||
}
|
||||
progress.report({message: 'Preparing final alignment'});
|
||||
await push_current_stack_to_js_callback_queue_to_allow_ui_update();
|
||||
aligned_doc_text = ll_rainbow_utils().align_columns(active_doc, delim, policy, comment_prefix, column_stats);
|
||||
aligned_files.add(active_doc.fileName);
|
||||
refresh_status_bar_buttons(active_doc);
|
||||
if (aligned_doc_text === null) {
|
||||
vscode.window.showWarningMessage('Table is already aligned, skipping');
|
||||
return;
|
||||
}
|
||||
let invalid_range = new vscode.Range(0, 0, active_doc.lineCount /* Intentionally missing the '-1' */, 0);
|
||||
let full_range = active_doc.validateRange(invalid_range);
|
||||
edit_builder.replace(full_range, aligned_doc_text);
|
||||
// The last stage of actually applying the edits takes almost 80% of the whole alignment runtime.
|
||||
progress.report({message: 'Aligning columns'});
|
||||
await push_current_stack_to_js_callback_queue_to_allow_ui_update();
|
||||
await replace_doc_content(active_editor, active_doc, aligned_doc_text);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -995,9 +1022,7 @@ async function do_copy_back(query_result_doc, active_editor) {
|
||||
let active_doc = get_active_doc(active_editor);
|
||||
if (!active_doc)
|
||||
return;
|
||||
let invalid_range = new vscode.Range(0, 0, active_doc.lineCount /* Intentionally missing the '-1' */, 0);
|
||||
let full_range = active_doc.validateRange(invalid_range);
|
||||
await active_editor.edit(edit => edit.replace(full_range, data));
|
||||
await replace_doc_content(active_editor, active_doc, data);
|
||||
}
|
||||
|
||||
|
||||
@ -1216,7 +1241,6 @@ async function edit_rbql(integration_test_options=null) {
|
||||
show_single_line_error("Unable to run RBQL for this file");
|
||||
return;
|
||||
}
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let language_id = active_doc.languageId;
|
||||
let delim = 'monocolumn';
|
||||
let policy = 'monocolumn';
|
||||
@ -1224,7 +1248,7 @@ async function edit_rbql(integration_test_options=null) {
|
||||
[delim, policy] = dialect_map[language_id];
|
||||
}
|
||||
let enable_rfc_newlines = get_from_global_state(make_rfc_policy_key(input_path), false);
|
||||
let with_headers_by_default = config ? config.get('rbql_with_headers_by_default') : false;
|
||||
let with_headers_by_default = get_from_config('rbql_with_headers_by_default', false);
|
||||
let with_headers = get_from_global_state(make_with_headers_key(input_path), with_headers_by_default);
|
||||
let header = get_header_from_document(active_doc, delim, policy);
|
||||
rbql_context = {
|
||||
@ -1258,8 +1282,7 @@ function get_num_columns_if_delimited(active_doc, delim, policy, min_num_columns
|
||||
var num_lines = active_doc.lineCount;
|
||||
let num_fields = 0;
|
||||
let num_lines_checked = 0;
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let comment_prefix_for_autodetection = config ? config.get('comment_prefix') : '';
|
||||
let comment_prefix_for_autodetection = get_from_config('comment_prefix', '');
|
||||
if (!comment_prefix_for_autodetection)
|
||||
comment_prefix_for_autodetection = '#';
|
||||
for (var lnum = 0; lnum < num_lines; lnum++) {
|
||||
@ -1282,8 +1305,7 @@ function get_num_columns_if_delimited(active_doc, delim, policy, min_num_columns
|
||||
|
||||
|
||||
function autodetect_dialect(active_doc, candidate_separators) {
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let min_num_lines = config ? config.get('autodetection_min_line_count') : 10;
|
||||
let min_num_lines = get_from_config('autodetection_min_line_count', 10);
|
||||
if (active_doc.lineCount < min_num_lines)
|
||||
return null;
|
||||
|
||||
@ -1331,10 +1353,9 @@ function autodetect_dialect_frequency_based(active_doc, candidate_separators) {
|
||||
async function autoenable_rainbow_csv(active_doc) {
|
||||
if (!active_doc)
|
||||
return;
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
if (!config || !config.get('enable_separator_autodetection'))
|
||||
if (!get_from_config('enable_separator_autodetection', false))
|
||||
return;
|
||||
let candidate_separators = config.get('autodetect_separators');
|
||||
let candidate_separators = get_from_config('autodetect_separators', []);
|
||||
var original_language_id = active_doc.languageId;
|
||||
var file_path = active_doc.fileName;
|
||||
if (!file_path || autodetection_stoplist.has(file_path)) {
|
||||
@ -1368,8 +1389,7 @@ async function handle_doc_edit(change_event) {
|
||||
let active_doc = change_event.document;
|
||||
if (!active_doc)
|
||||
return;
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let candidate_separators = config.get('autodetect_separators');
|
||||
let candidate_separators = get_from_config('autodetect_separators', []);
|
||||
let rainbow_csv_language_id = autodetect_dialect(active_doc, candidate_separators);
|
||||
if (!rainbow_csv_language_id)
|
||||
return;
|
||||
@ -1380,8 +1400,7 @@ async function handle_doc_edit(change_event) {
|
||||
|
||||
|
||||
function register_csv_copy_paste(active_doc) {
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
if (!config || !config.get('enable_separator_autodetection'))
|
||||
if (!get_from_config('enable_separator_autodetection', false))
|
||||
return;
|
||||
if (!active_doc || doc_edit_subscription)
|
||||
return;
|
||||
@ -1523,8 +1542,8 @@ async function activate(context) {
|
||||
var rainbow_off_cmd = vscode.commands.registerCommand('rainbow-csv.RainbowSeparatorOff', restore_original_language);
|
||||
var sample_head_cmd = vscode.commands.registerCommand('rainbow-csv.SampleHead', async function(uri) { await make_preview(uri, 'head'); }); // WEB_DISABLED
|
||||
var sample_tail_cmd = vscode.commands.registerCommand('rainbow-csv.SampleTail', async function(uri) { await make_preview(uri, 'tail'); }); // WEB_DISABLED
|
||||
var align_cmd = vscode.commands.registerTextEditorCommand('rainbow-csv.Align', align_table);
|
||||
var shrink_cmd = vscode.commands.registerTextEditorCommand('rainbow-csv.Shrink', shrink_table);
|
||||
var align_cmd = vscode.commands.registerCommand('rainbow-csv.Align', align_table);
|
||||
var shrink_cmd = vscode.commands.registerCommand('rainbow-csv.Shrink', shrink_table);
|
||||
var copy_back_cmd = vscode.commands.registerCommand('rainbow-csv.CopyBack', copy_back); // WEB_DISABLED
|
||||
var internal_test_cmd = vscode.commands.registerCommand('rainbow-csv.InternalTest', run_internal_test_cmd);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"name": "rainbow-csv",
|
||||
"displayName": "Rainbow CSV",
|
||||
"description": "Highlight CSV and TSV files, Run SQL-like queries",
|
||||
"version": "2.2.0",
|
||||
"version": "2.3.0",
|
||||
"publisher": "mechatroner",
|
||||
"license": "MIT",
|
||||
"icon": "rainbow_csv_logo.png",
|
||||
@ -424,8 +424,10 @@
|
||||
"id": "3792588c-3d35-442d-91ea-fe6a755e8155",
|
||||
"publisherId": "0d5438b6-325a-4f88-aa28-6192aa2cf2a6",
|
||||
"publisherDisplayName": "mechatroner",
|
||||
"targetPlatform": "undefined",
|
||||
"updated": true,
|
||||
"isPreReleaseVersion": false,
|
||||
"preRelease": false,
|
||||
"installedTimestamp": 1648374022933
|
||||
"installedTimestamp": 1651501115341
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
@ -1,17 +1,16 @@
|
||||
const os = require('os');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const rbql = require('./rbql_core/rbql-js/rbql.js');
|
||||
const rbql_csv = require('./rbql_core/rbql-js/rbql_csv.js');
|
||||
|
||||
const vscode = require('vscode');
|
||||
|
||||
const csv_utils = require('./rbql_core/rbql-js/csv_utils.js');
|
||||
|
||||
const non_numeric_sentinel = -1;
|
||||
const number_regex = /^([0-9]+)(\.[0-9]+)?$/;
|
||||
|
||||
class AssertionError extends Error {}
|
||||
|
||||
|
||||
function assert(condition, message=null) {
|
||||
if (!condition) {
|
||||
if (!message) {
|
||||
@ -58,11 +57,36 @@ function get_default_python_udf_content() {
|
||||
}
|
||||
|
||||
|
||||
function calc_column_sizes(active_doc, delim, policy) {
|
||||
let result = [];
|
||||
function update_subcomponent_stats(field, is_first_line, max_field_components_lens) {
|
||||
// Extract overall field length and length of integer and fractional parts of the field if it represents a number.
|
||||
// Here `max_field_components_lens` is a tuple: (max_field_length, max_integer_part_length, max_fractional_part_length)
|
||||
if (field.length > max_field_components_lens[0]) {
|
||||
max_field_components_lens[0] = field.length;
|
||||
}
|
||||
if (max_field_components_lens[1] == non_numeric_sentinel) {
|
||||
// Column is not a number, early return.
|
||||
return;
|
||||
}
|
||||
let match_result = number_regex.exec(field);
|
||||
if (match_result === null) {
|
||||
if (!is_first_line && field.length) { // Checking field_length here allows numeric columns to have some of the fields empty.
|
||||
// We only mark the column as non-header if we know that this is not a header line.
|
||||
max_field_components_lens[1] = non_numeric_sentinel;
|
||||
max_field_components_lens[2] = non_numeric_sentinel;
|
||||
}
|
||||
return;
|
||||
}
|
||||
let cur_integer_part_length = match_result[1].length;
|
||||
max_field_components_lens[1] = Math.max(max_field_components_lens[1], cur_integer_part_length);
|
||||
let cur_fractional_part_length = match_result[2] === undefined ? 0 : match_result[2].length;
|
||||
max_field_components_lens[2] = Math.max(max_field_components_lens[2], cur_fractional_part_length);
|
||||
}
|
||||
|
||||
|
||||
function calc_column_stats(active_doc, delim, policy, comment_prefix) {
|
||||
let column_stats = [];
|
||||
let num_lines = active_doc.lineCount;
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let comment_prefix = config ? config.get('comment_prefix') : '';
|
||||
let is_first_line = true;
|
||||
for (let lnum = 0; lnum < num_lines; lnum++) {
|
||||
let line_text = active_doc.lineAt(lnum).text;
|
||||
if (comment_prefix && line_text.startsWith(comment_prefix))
|
||||
@ -71,42 +95,105 @@ function calc_column_sizes(active_doc, delim, policy) {
|
||||
if (warning) {
|
||||
return [null, lnum + 1];
|
||||
}
|
||||
for (let i = 0; i < fields.length; i++) {
|
||||
if (result.length <= i)
|
||||
result.push(0);
|
||||
result[i] = Math.max(result[i], (fields[i].trim()).length);
|
||||
for (let fnum = 0; fnum < fields.length; fnum++) {
|
||||
let field = fields[fnum].trim();
|
||||
if (column_stats.length <= fnum) {
|
||||
column_stats.push([0, 0, 0]);
|
||||
}
|
||||
update_subcomponent_stats(field, is_first_line, column_stats[fnum]);
|
||||
}
|
||||
return [result, null];
|
||||
is_first_line = false;
|
||||
}
|
||||
return [column_stats, null];
|
||||
}
|
||||
|
||||
|
||||
function align_columns(active_doc, delim, policy, column_sizes) {
|
||||
function adjust_column_stats(column_stats) {
|
||||
// Ensure that numeric components max widths are consistent with non-numeric (header) width.
|
||||
let adjusted_stats = [];
|
||||
for (let column_stat of column_stats) {
|
||||
if (column_stat[1] <= 0) {
|
||||
column_stat[1] = -1;
|
||||
column_stat[2] = -1;
|
||||
}
|
||||
if (column_stat[1] > 0) {
|
||||
// The sum of integer and float parts can be bigger than the max width, e.g. here:
|
||||
// value
|
||||
// 0.12
|
||||
// 1234
|
||||
if (column_stat[1] + column_stat[2] > column_stat[0]) {
|
||||
column_stat[0] = column_stat[1] + column_stat[2];
|
||||
}
|
||||
// This is needed when the header is wider than numeric components and/or their sum.
|
||||
if (column_stat[0] - column_stat[2] > column_stat[1]) {
|
||||
column_stat[1] = column_stat[0] - column_stat[2];
|
||||
}
|
||||
// Sanity check.
|
||||
if (column_stat[0] != column_stat[1] + column_stat[2]) {
|
||||
// Assertion Error, this can never happen.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
adjusted_stats.push(column_stat);
|
||||
}
|
||||
return adjusted_stats;
|
||||
}
|
||||
|
||||
|
||||
function align_field(field, is_first_line, max_field_components_lens, is_last_column) {
|
||||
// Align field, use Math.max() to avoid negative delta_length which can happen theorethically due to async doc edit.
|
||||
const extra_readability_whitespace_length = 1;
|
||||
field = field.trim();
|
||||
if (max_field_components_lens[1] == non_numeric_sentinel) {
|
||||
let delta_length = Math.max(max_field_components_lens[0] - field.length, 0);
|
||||
return is_last_column ? field : field + ' '.repeat(delta_length + extra_readability_whitespace_length);
|
||||
}
|
||||
if (is_first_line) {
|
||||
if (number_regex.exec(field) === null) {
|
||||
// The line must be a header - align it using max_width rule.
|
||||
let delta_length = Math.max(max_field_components_lens[0] - field.length, 0);
|
||||
return is_last_column ? field : field + ' '.repeat(delta_length + extra_readability_whitespace_length);
|
||||
}
|
||||
}
|
||||
let dot_pos = field.indexOf('.');
|
||||
let cur_integer_part_length = dot_pos == -1 ? field.length : dot_pos;
|
||||
// Here cur_fractional_part_length includes the leading dot too.
|
||||
let cur_fractional_part_length = dot_pos == -1 ? 0 : field.length - dot_pos;
|
||||
let integer_delta_length = Math.max(max_field_components_lens[1] - cur_integer_part_length, 0);
|
||||
let fractional_delta_length = Math.max(max_field_components_lens[2] - cur_fractional_part_length);
|
||||
let trailing_spaces = is_last_column ? '' : ' '.repeat(fractional_delta_length + extra_readability_whitespace_length);
|
||||
return ' '.repeat(integer_delta_length) + field + trailing_spaces;
|
||||
}
|
||||
|
||||
|
||||
function align_columns(active_doc, delim, policy, comment_prefix, column_stats) {
|
||||
let result_lines = [];
|
||||
let num_lines = active_doc.lineCount;
|
||||
let has_edit = false;
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let comment_prefix = config ? config.get('comment_prefix') : '';
|
||||
let is_first_line = true;
|
||||
for (let lnum = 0; lnum < num_lines; lnum++) {
|
||||
let line_text = active_doc.lineAt(lnum).text;
|
||||
if (comment_prefix && line_text.startsWith(comment_prefix)) {
|
||||
result_lines.push(line_text);
|
||||
continue;
|
||||
}
|
||||
let fields = csv_utils.smart_split(line_text, delim, policy, true)[0];
|
||||
for (let i = 0; i < fields.length - 1; i++) {
|
||||
if (i >= column_sizes.length) // Safeguard against async doc edit.
|
||||
break;
|
||||
let adjusted = fields[i].trim();
|
||||
let delta_len = column_sizes[i] - adjusted.length;
|
||||
if (delta_len >= 0) { // Safeguard against async doc edit.
|
||||
adjusted += ' '.repeat(delta_len + 1);
|
||||
if (lnum + 1 == num_lines && line_text == '') {
|
||||
// Skip the last empty line which corresponds to the trailing newline character.
|
||||
result_lines.push(line_text);
|
||||
continue;
|
||||
}
|
||||
if (fields[i] != adjusted) {
|
||||
fields[i] = adjusted;
|
||||
let fields = csv_utils.smart_split(line_text, delim, policy, true)[0];
|
||||
for (let fnum = 0; fnum < fields.length; fnum++) {
|
||||
if (fnum >= column_stats.length) // Safeguard against async doc edit, should never happen.
|
||||
break;
|
||||
let is_last_column = fnum + 1 == column_stats.length;
|
||||
let adjusted = align_field(fields[fnum], is_first_line, column_stats[fnum], is_last_column);
|
||||
if (fields[fnum] != adjusted) {
|
||||
fields[fnum] = adjusted;
|
||||
has_edit = true;
|
||||
}
|
||||
}
|
||||
is_first_line = false;
|
||||
result_lines.push(fields.join(delim));
|
||||
}
|
||||
if (!has_edit)
|
||||
@ -115,12 +202,10 @@ function align_columns(active_doc, delim, policy, column_sizes) {
|
||||
}
|
||||
|
||||
|
||||
function shrink_columns(active_doc, delim, policy) {
|
||||
function shrink_columns(active_doc, delim, policy, comment_prefix) {
|
||||
let result_lines = [];
|
||||
let num_lines = active_doc.lineCount;
|
||||
let has_edit = false;
|
||||
const config = vscode.workspace.getConfiguration('rainbow_csv');
|
||||
let comment_prefix = config ? config.get('comment_prefix') : '';
|
||||
for (let lnum = 0; lnum < num_lines; lnum++) {
|
||||
let line_text = active_doc.lineAt(lnum).text;
|
||||
if (comment_prefix && line_text.startsWith(comment_prefix)) {
|
||||
@ -584,4 +669,7 @@ module.exports.get_default_js_udf_content = get_default_js_udf_content;
|
||||
module.exports.get_default_python_udf_content = get_default_python_udf_content;
|
||||
module.exports.align_columns = align_columns;
|
||||
module.exports.shrink_columns = shrink_columns;
|
||||
module.exports.calc_column_sizes = calc_column_sizes;
|
||||
module.exports.calc_column_stats = calc_column_stats;
|
||||
module.exports.adjust_column_stats = adjust_column_stats;
|
||||
module.exports.update_subcomponent_stats = update_subcomponent_stats;
|
||||
module.exports.align_field = align_field;
|
||||
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
|
||||
<Metadata>
|
||||
<Identity Language="en-US" Id="js-debug-companion" Version="1.0.17" Publisher="ms-vscode" />
|
||||
<Identity Language="en-US" Id="js-debug-companion" Version="1.0.18" Publisher="ms-vscode" />
|
||||
<DisplayName>JavaScript Debugger Companion Extension</DisplayName>
|
||||
<Description xml:space="preserve">Companion extension to js-debug that provides capability for remote debugging</Description>
|
||||
<Tags>javascript</Tags>
|
||||
@ -232,7 +232,7 @@ Copyright 2019
|
||||
human-signals 2.1.0 - Apache-2.0
|
||||
https://git.io/JeluP
|
||||
|
||||
Copyright 2019
|
||||
Copyright 2019 ehmicky <ehmicky@gmail.com>
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
@ -496,7 +496,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
signal-exit 3.0.3 - ISC
|
||||
https://github.com/tapjs/signal-exit
|
||||
|
||||
Copyright (c) 2015
|
||||
Copyright (c) 2015, Contributors
|
||||
|
||||
The ISC License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"name": "js-debug-companion",
|
||||
"displayName": "JavaScript Debugger Companion Extension",
|
||||
"description": "Companion extension to js-debug that provides capability for remote debugging",
|
||||
"version": "1.0.17",
|
||||
"version": "1.0.18",
|
||||
"publisher": "ms-vscode",
|
||||
"engines": {
|
||||
"vscode": "^1.65.0"
|
||||
@ -91,6 +91,6 @@
|
||||
"updated": true,
|
||||
"isPreReleaseVersion": false,
|
||||
"preRelease": false,
|
||||
"installedTimestamp": 1649320100391
|
||||
"installedTimestamp": 1651564989793
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
|
||||
<Metadata>
|
||||
<Identity Language="en-US" Id="tabnine-vscode" Version="3.5.42" Publisher="TabNine"/>
|
||||
<Identity Language="en-US" Id="tabnine-vscode" Version="3.5.45" Publisher="TabNine"/>
|
||||
<DisplayName>Tabnine AI Autocomplete for Javascript, Python, Typescript, PHP, Go, Java, Ruby & more</DisplayName>
|
||||
<Description xml:space="preserve">👩💻🤖 JavaScript, Python, Java, Typescript & all other languages - AI Code completion plugin. Tabnine makes developers more productive by auto-completing their code.</Description>
|
||||
<Tags>javascript,python,typescript,php,autocomplete,ruby,java,go,golang,bash,kotlin,html,css,ocaml,perl,rust,julia,lua,haskell,c,cpp,c++,csharp,c#,react,swift,objective-c,objectivec,ai,method completion,intellicode,intellisense,snippets,kite,nodejs,node,node.js,jupyter,keybindings</Tags>
|
||||
@ -17,6 +17,12 @@
|
||||

|
||||
<br />
|
||||
|
||||
####TL;DR
|
||||
**[Frequently Asked Questions](#frequently-asked-questions)**
|
||||
**[Easy Installation](#easy-installation)**
|
||||
**[Supported Languages](#all-the-languages-you-love)**
|
||||
**[Tabnine for Teams](#personalized-ai-model-trained-on-your-code)**
|
||||
|
||||
Boost your productivity with the expert guidance of an AI code completion assistant **trusted by millions of developers**.
|
||||
|
||||
Whether you are a new dev or a seasoned pro, working solo or part of a team, Tabnine’s AI assistant will increase your development velocity with code completions in all the most popular coding languages and IDEs.
|
||||
@ -27,12 +33,12 @@ Whether you are a new dev or a seasoned pro, working solo or part of a team, Tab
|
||||
|
||||
## Personalized AI Model Trained On Your Code
|
||||
|
||||
Tabnine for Teams provides expert inline coding guidance with an AI assistant privately trained on your team’s coding standards.
|
||||
Tabnine for Teams provides expert inline coding guidance with an AI assistant privately trained on your team’s coding standards. [Learn more](https://www.tabnine.com/team?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace)
|
||||
<br />
|
||||
|
||||
## GitHub, GitLab and Bitbucket Integration
|
||||
|
||||
Tabnine makes it easy and secure for team admins to grant their AI assistant access to their Github, GitLab and Bitbucket repositories. Simply assign the repositories you want your AI assistant to learn from.
|
||||
Tabnine makes it easy and secure for team admins to grant their AI assistant access to their Github, GitLab and Bitbucket repositories. Simply assign the repositories you want your AI assistant to learn from. [Learn more](https://www.tabnine.com/team?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace)
|
||||
<br />
|
||||
|
||||

|
||||
@ -188,20 +194,33 @@ Deep Tabnine is based on GPT-2, which uses the **_Transformers Network Architect
|
||||
|
||||
---
|
||||
|
||||
- **Q: What is the difference between Tabnine Free and Tabnine Pro?**
|
||||
- A: Tabnine’s Free version is a great option for junior developers working alone. The Free plan provides a reliable AI code completion assistant running an algorithm trained on a limited block of open-source code.
|
||||
Tabnine Pro delivers increased productivity and AI code completion accuracy for independent professional developers and teams of up to 50. Tabnine Pro’s algorithm trains on deep machine learning, a larger public code sampling, and language-specific models. The advanced AI assistant learns your team’s code, projects, preferences, and patterns, providing an unmatched real-time, in-IDE code completion experience. The more team members your Tabnine AI assistant interacts with, the more accurate your code completions become.
|
||||
### Frequently Asked Questions
|
||||
|
||||
- **Q: What is the difference between Tabnine Free and Tabnine Team?**
|
||||
- A: Tabnine's Free version is a great option for junior developers working alone. The Free plan provides a reliable Basic AI code completion assistant trained on a limited block of open-source code with permissive licenses.
|
||||
Tabnine for Teams provides multi-model advanced AI code completions for teams of professional developers. The Tabnine Teams Private Model is trained exclusively on your team's code and the repositories you specify, maximizing the value of every development team member, improving team-wide code standardization, accelerating onboarding, and cutting code review costs.
|
||||
The Private AI Model significantly improves your code completion accuracy by incorporating your organization's coding standards and best practices.
|
||||
Tabnine for Teams users also have the option to grant their AI assistant secure read-only access to their GitHub, GitLab, and Bitbucket repositories. Every line of team-created code the AI assistant learns from amplifies the accuracy of its code completions, boosting productivity for the entire team.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: What are the benefits for individual developers upgrading to Tabnine Pro (Teams)?**
|
||||
- A: Experience improved productivity with longer, more accurate code completions thanks to Tabnine Pro’s advanced AI algorithm and language-specific models. Tabnine Pro learns from your code, projects, preferences, and patterns, providing a real-time, in-IDE code completion experience that is continuously improving. In addition, Tabnine Pro utilizes an advanced Public Code AI algorithm based on more than a billion lines of open-source code with permissive licenses.
|
||||
- **Q: What are the benefits for developers upgrading to Tabnine for Teams?**
|
||||
- A: Tabnine for Teams private AI code completion assistant is trained exclusively on your team's code and the repositories you specify. Your team's AI assistant maximizes the value of every development team member, improving team-wide code standardization, accelerating onboarding, and cutting code review costs.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: What are the benefits for teams of developers upgrading to Tabnine Pro (Teams)?**
|
||||
- A: You and your team will experience improved productivity with longer, more accurate code completions thanks to Tabnine Pro’s Advanced AI code completion assistant.
|
||||
Tabnine Pro is powered by our Team Learning AI, advanced Public Code algorithm, and a variety of language-specific models. The result is a real-time, in-IDE code completion assistant that is constantly learning, adapting, and improving. The more team members your AI assistant interacts with, the better it gets at anticipating your team’s code completion needs.
|
||||
- **Q: How do I enable GitHub integration??**
|
||||
- A: Tabnine team admins can enable GitHub integration in the [Tabnine App](https://app.tabnine.com/?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace). Tabnine's GitHub integration makes it easy and secure to give your AI assistant access to your Github repositories. You assign the repositories you want your AI assistant to learn from, and you control the permissions.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: How do I enable GitLab integration??**
|
||||
- A: Tabnine team admins can enable GitHub integration in the [Tabnine App](https://app.tabnine.com/?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace). Tabnine's GitHub integration makes it easy and secure to give your AI assistant access to your Github repositories. You assign the repositories you want your AI assistant to learn from, and you control the permissions.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: How do I enable GitLab integration??**
|
||||
- A: Tabnine team admins can enable GitLab integration in the [Tabnine App](https://app.tabnine.com/?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace). Tabnine's GitLab integration makes it easy and secure to give your AI assistant access to your GitLab repositories. You assign the repositories you want your AI assistant to learn from, and you control the permissions.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
@ -211,12 +230,8 @@ Deep Tabnine is based on GPT-2, which uses the **_Transformers Network Architect
|
||||
<br />
|
||||
|
||||
- **Q: Can I install Tabnine on multiple machines?**
|
||||
- A: You can use your Tabnine license on as many computers and operating systems as you like. All Tabnine licenses are per-user, rather than per-machine.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: Is there a Tabnine Student program?**
|
||||
- A: Yes, If you’re a student, you can register for Tabnine Pro for FREE using your school email address. [Get Tabnine Student now](https://www.tabnine.com/students?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace)
|
||||
- A: You can use your Tabnine license on as many computers and operating systems as you like.
|
||||
All Tabnine licenses are per-seat, rather than per-machine.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
@ -230,13 +245,8 @@ Deep Tabnine is based on GPT-2, which uses the **_Transformers Network Architect
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: Do both the Tabnine AI algorithms work together?**
|
||||
- A: Yes, the two algorithms work in tandem, simultaneously providing next-level AI accuracy. Tabnine’s Public Code algorithm bases its suggestions on trusted public code with permissive licenses while the Team Learning Algorithm adapts to you and your team’s preferences, code selections, and ongoing AI interactions.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: Can I run Tabnine locally, or do I need to use the Cloud?**
|
||||
- A: You can run Tabnine locally or on the cloud, you choose! Regardless, your code is never shared or used as part of Tabnine’s Public Code Trained AI - That’s the Tabnine Privacy Promise.
|
||||
- A: You can run Tabnine locally or on the cloud, you choose! Regardless, your code is never shared.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
@ -247,7 +257,8 @@ See the full list of IDEs and languages [HERE](https://www.tabnine.com/install?u
|
||||
<br />
|
||||
|
||||
- **Q: How many languages does Tabnine support?**
|
||||
- A: Tabnine supports dozens of languages with more being added all the time. See the full list of IDEs and languages [HERE](https://www.tabnine.com/install?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace).
|
||||
- A: Tabnine supports dozens of languages with more being added all the time.
|
||||
See the full list of IDEs and languages [HERE](https://www.tabnine.com/install?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace).
|
||||
<br />
|
||||
<br />
|
||||
|
||||
@ -257,16 +268,6 @@ See the full list of IDEs and languages [HERE](https://www.tabnine.com/install?u
|
||||
<br />
|
||||
|
||||
- **Q: Can Tabnine be trained on my team’s existing codebase?**
|
||||
- A: Yes - Tabnine Pro users have the option to train their private Tabnine AI algorithm on their existing codebase. This will provide an instant increase in the accuracy of you and your team’s code completions.
|
||||
- A: Yes - Tabnine Team users have the option to train their private Tabnine Team Learning AI model on their existing codebase using Tabnine Connect. Tabnine Connect makes it easy and secure to give your Tabnine AI assistant access to your Github, GitLab, or Bitbucket repositories. You assign the repositories that you want it to learn from, and you control the permissions.
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: What do you need to qualify for the Tabnine Student discount?**
|
||||
- A: School can be tough so we’ve made getting the Tabnine Student Pass simple - all you need to register for your Free Tabnine Student Pro account is your school email address.
|
||||
[Get Tabnine Student now](https://www.tabnine.com/students?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace)
|
||||
<br />
|
||||
<br />
|
||||
|
||||
- **Q: How long does the Tabnine Student discount last?**
|
||||
- A: Your FREE Tabnine Student Pro account is good for an entire year, and you can renew your Tabnine Student account every year for as long as you are in school.
|
||||
[Get Tabnine Student now](https://www.tabnine.com/students?utm_source=ide_marketplace&utm_medium=organic&utm_campaign=vscode_marketplace)
|
||||
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
@ -1,7 +1,7 @@
|
||||
{
|
||||
"publisher": "TabNine",
|
||||
"name": "tabnine-vscode",
|
||||
"version": "3.5.42",
|
||||
"version": "3.5.45",
|
||||
"displayName": "Tabnine AI",
|
||||
"description": "👩💻🤖 JavaScript, Python, Java, Typescript & all other languages - AI Code completion plugin. Tabnine makes developers more productive by auto-completing their code.",
|
||||
"icon": "small_logo.png",
|
||||
@ -118,6 +118,7 @@
|
||||
"devDependencies": {
|
||||
"@types/chai": "^4.2.14",
|
||||
"@types/debounce": "^1.2.1",
|
||||
"@types/diff": "^5.0.2",
|
||||
"@types/glob": "^7.1.3",
|
||||
"@types/mocha": "^8.2.2",
|
||||
"@types/mock-fs": "^4.13.0",
|
||||
@ -165,7 +166,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"await-semaphore": "^0.1.3",
|
||||
"axios": "^0.21.0",
|
||||
"debounce": "^1.2.1",
|
||||
"diff": "^5.0.0",
|
||||
"extract-zip": "^2.0.1",
|
||||
"https-proxy-agent": "^5.0.0",
|
||||
"semver": "^7.3.2",
|
||||
@ -230,6 +233,22 @@
|
||||
{
|
||||
"command": "Tabnine.saveSnippet",
|
||||
"title": "⌬ Tabnine: Save Snippet"
|
||||
},
|
||||
{
|
||||
"command": "Tabnine.hideSuggestion",
|
||||
"title": "Hide",
|
||||
"icon": {
|
||||
"dark": "assets/close_inverse.svg",
|
||||
"light": "assets/close.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "Tabnine.applySuggestion",
|
||||
"title": "Apply",
|
||||
"icon": {
|
||||
"dark": "assets/approve_inverse.svg",
|
||||
"light": "assets/approve.svg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"menus": {
|
||||
@ -252,6 +271,18 @@
|
||||
"command": "TabNine::assistantToggle",
|
||||
"when": "tabnine-assistant:capability"
|
||||
}
|
||||
],
|
||||
"comments/commentThread/title": [
|
||||
{
|
||||
"command": "Tabnine.hideSuggestion",
|
||||
"group": "navigation",
|
||||
"when": "commentController == tabnine.commentController"
|
||||
},
|
||||
{
|
||||
"command": "Tabnine.applySuggestion",
|
||||
"group": "navigation",
|
||||
"when": "commentController == tabnine.commentController"
|
||||
}
|
||||
]
|
||||
},
|
||||
"configuration": [
|
||||
@ -281,6 +312,10 @@
|
||||
"type": "string",
|
||||
"description": "Tabnine's log file (Visual Studio Code must be restarted for this setting to take effect)"
|
||||
},
|
||||
"tabnine.logLevel": {
|
||||
"type": "string",
|
||||
"description": "Tabnine's log level (Visual Studio Code must be restarted for this setting to take effect)"
|
||||
},
|
||||
"tabnine.receiveBetaChannelUpdates": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
@ -348,6 +383,6 @@
|
||||
"updated": true,
|
||||
"isPreReleaseVersion": false,
|
||||
"preRelease": false,
|
||||
"installedTimestamp": 1649320099209
|
||||
"installedTimestamp": 1651570610158
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
@ -1 +1 @@
|
||||
[{"analyzerName":"intellisense-members-lstm-pylance","languageName":"python","identity":{"modelId":"E61945A9A512ED5E1A3EE3F1A2365B88F8FE","outputId":"E4E9EADA96734F01970E616FAB2FAC19","modifiedTimeUtc":"2020-08-11T14:06:50.811Z"},"filePath":"/home/kristofers/.vscode/extensions/visualstudioexptteam.vscodeintellicode-1.2.20/cache/E61945A9A512ED5E1A3EE3F1A2365B88F8FE_E4E9EADA96734F01970E616FAB2FAC19","lastAccessTimeUtc":"2022-04-28T20:51:11.821Z"}]
|
||||
[{"analyzerName":"intellisense-members-lstm-pylance","languageName":"python","identity":{"modelId":"E61945A9A512ED5E1A3EE3F1A2365B88F8FE","outputId":"E4E9EADA96734F01970E616FAB2FAC19","modifiedTimeUtc":"2020-08-11T14:06:50.811Z"},"filePath":"/home/kristofers/.vscode/extensions/visualstudioexptteam.vscodeintellicode-1.2.20/cache/E61945A9A512ED5E1A3EE3F1A2365B88F8FE_E4E9EADA96734F01970E616FAB2FAC19","lastAccessTimeUtc":"2022-05-05T06:15:38.040Z"}]
|
||||