MCPcopy
hub / github.com/VSCodeVim/Vim / evaluateVariable

Method evaluateVariable

src/vimscript/expression/evaluate.ts:324–390  ·  view source on GitHub ↗
(varExpr: VariableExpression)

Source from the content-addressed store, hash-verified

322 }
323
324 private evaluateVariable(varExpr: VariableExpression): Value {
325 if (varExpr.namespace === undefined) {
326 for (let i = this.localScopes.length - 1; i >= 0; i--) {
327 const _var = this.localScopes[i].get(varExpr.name);
328 if (_var !== undefined) {
329 return _var.value;
330 }
331 }
332 }
333
334 if (varExpr.namespace === 'g' || varExpr.namespace === undefined) {
335 const _var = EvaluationContext.globalVariables.get(varExpr.name);
336 if (_var === undefined) {
337 throw VimError.UndefinedVariable(
338 varExpr.namespace ? `${varExpr.namespace}:${varExpr.name}` : varExpr.name,
339 );
340 } else {
341 return _var.value;
342 }
343 } else if (varExpr.namespace === 'v') {
344 // TODO: v:count, v:count1, v:prevcount
345 // TODO: v:operator
346 // TODO: v:register
347 // TODO: v:statusmsg, v:warningmsg, v:errmsg
348 if (varExpr.name === 'true') {
349 return bool(true);
350 } else if (varExpr.name === 'false') {
351 return bool(false);
352 } else if (varExpr.name === 'hlsearch') {
353 return bool(globalState.hl);
354 } else if (varExpr.name === 't_number') {
355 return int(0);
356 } else if (varExpr.name === 't_string') {
357 return int(1);
358 } else if (varExpr.name === 't_func') {
359 return int(2);
360 } else if (varExpr.name === 't_list') {
361 return int(3);
362 } else if (varExpr.name === 't_dict') {
363 return int(4);
364 } else if (varExpr.name === 't_float') {
365 return int(5);
366 } else if (varExpr.name === 't_bool') {
367 return int(6);
368 } else if (varExpr.name === 't_blob') {
369 return int(10);
370 } else if (varExpr.name === 'numbermax') {
371 return int(Number.MAX_SAFE_INTEGER);
372 } else if (varExpr.name === 'numbermin') {
373 return int(Number.MIN_SAFE_INTEGER);
374 } else if (varExpr.name === 'numbersize') {
375 // NOTE: In VimScript this refers to a 64 bit integer; we have a 64 bit float because JavaScript
376 return int(64);
377 } else if (varExpr.name === 'errors') {
378 return list(this.errors.map(str));
379 } else if (varExpr.name === 'searchforward') {
380 return int(globalState.searchState?.direction === SearchDirection.Backward ? 0 : 1);
381 }

Callers 1

evaluateMethod · 0.95

Calls 7

evaluateMethod · 0.95
boolFunction · 0.90
intFunction · 0.90
listFunction · 0.90
variableFunction · 0.90
UndefinedVariableMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected