feat: add getVariableName and getProcedureName to CodeGenerator (#7445)

* feat: add getVariableName and getProcedureName to CodeGenerator

* feat: make nameDB_ public

* feat: update block code generators to use new APIs

* chore: fix build

* chore: remove unused imports
This commit is contained in:
Maribeth Bottorff
2023-08-31 10:49:17 -07:00
committed by GitHub
parent b0a7c004a9
commit 68261e5dd9
28 changed files with 122 additions and 109 deletions

View File

@@ -58,8 +58,7 @@ export function controls_whileUntil(block, generator) {
export function controls_for(block, generator) {
// For loop.
const variable0 =
generator.nameDB_.getName(
block.getFieldValue('VAR'), NameType.VARIABLE);
generator.getVariableName(block.getFieldValue('VAR'));
let argument0 = generator.valueToCode(block, 'FROM', Order.NONE) || '0';
let argument1 = generator.valueToCode(block, 'TO', Order.NONE) || '0';
let increment = generator.valueToCode(block, 'BY', Order.NONE) || '1';
@@ -167,8 +166,7 @@ def ${generator.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):
export function controls_forEach(block, generator) {
// For each loop.
const variable0 =
generator.nameDB_.getName(
block.getFieldValue('VAR'), NameType.VARIABLE);
generator.getVariableName(block.getFieldValue('VAR'));
const argument0 =
generator.valueToCode(block, 'LIST', Order.RELATIONAL) || '[]';
let branch = generator.statementToCode(block, 'DO');

View File

@@ -10,7 +10,6 @@
// Former goog.module ID: Blockly.Python.math
import {NameType} from '../../core/names.js';
import {Order} from './python_generator.js';
@@ -216,9 +215,7 @@ export function math_change(block, generator) {
'from numbers import Number';
const argument0 =
generator.valueToCode(block, 'DELTA', Order.ADDITIVE) || '0';
const varName =
generator.nameDB_.getName(
block.getFieldValue('VAR'), NameType.VARIABLE);
const varName = generator.getVariableName(block.getFieldValue('VAR'));
return varName + ' = (' + varName + ' if isinstance(' + varName +
', Number) else 0) + ' + argument0 + '\n';
};

View File

@@ -22,10 +22,11 @@ export function procedures_defreturn(block, generator) {
const globals = [];
const workspace = block.workspace;
const usedVariables = Variables.allUsedVarModels(workspace) || [];
for (let i = 0, variable; (variable = usedVariables[i]); i++) {
for (const variable of usedVariables) {
const varName = variable.name;
// getVars returns parameter names, not ids, for procedure blocks
if (block.getVars().indexOf(varName) === -1) {
globals.push(generator.nameDB_.getName(varName, NameType.VARIABLE));
globals.push(generator.getVariableName(varName));
}
}
// Add developer variables.
@@ -40,8 +41,7 @@ export function procedures_defreturn(block, generator) {
generator.INDENT + 'global ' + globals.join(', ') + '\n' :
'';
const funcName =
generator.nameDB_.getName(
block.getFieldValue('NAME'), NameType.PROCEDURE);
generator.getProcedureName(block.getFieldValue('NAME'));
let xfix1 = '';
if (generator.STATEMENT_PREFIX) {
xfix1 += generator.injectId(generator.STATEMENT_PREFIX, block);
@@ -74,7 +74,7 @@ export function procedures_defreturn(block, generator) {
const args = [];
const variables = block.getVars();
for (let i = 0; i < variables.length; i++) {
args[i] = generator.nameDB_.getName(variables[i], NameType.VARIABLE);
args[i] = generator.getVariableName(variables[i]);
}
let code = 'def ' + funcName + '(' + args.join(', ') + '):\n' + globalString +
xfix1 + loopTrap + branch + xfix2 + returnValue;
@@ -91,8 +91,7 @@ export const procedures_defnoreturn = procedures_defreturn;
export function procedures_callreturn(block, generator) {
// Call a procedure with a return value.
const funcName =
generator.nameDB_.getName(
block.getFieldValue('NAME'), NameType.PROCEDURE);
generator.getProcedureName(block.getFieldValue('NAME'));
const args = [];
const variables = block.getVars();
for (let i = 0; i < variables.length; i++) {

View File

@@ -15,7 +15,7 @@ import * as stringUtils from '../../core/utils/string.js';
import * as Variables from '../../core/variables.js';
// import type {Block} from '../../core/block.js';
import {CodeGenerator} from '../../core/generator.js';
import {Names, NameType} from '../../core/names.js';
import {Names} from '../../core/names.js';
// import type {Workspace} from '../../core/workspace.js';
import {inputTypes} from '../../core/inputs/input_types.js';
@@ -179,7 +179,7 @@ export class PythonGenerator extends CodeGenerator {
const variables = Variables.allUsedVarModels(workspace);
for (let i = 0; i < variables.length; i++) {
defvars.push(
this.nameDB_.getName(variables[i].getId(), NameType.VARIABLE) +
this.getVariableName(variables[i].getId()) +
' = None');
}

View File

@@ -87,8 +87,7 @@ export function text_join(block, generator) {
export function text_append(block, generator) {
// Append to a variable in place.
const varName =
generator.nameDB_.getName(
block.getFieldValue('VAR'), NameType.VARIABLE);
generator.getVariableName(block.getFieldValue('VAR'));
const value = generator.valueToCode(block, 'TEXT', Order.NONE) || "''";
return varName + ' = str(' + varName + ') + ' + forceString(value)[0] + '\n';
};

View File

@@ -10,15 +10,13 @@
// Former goog.module ID: Blockly.Python.variables
import {NameType} from '../../core/names.js';
import {Order} from './python_generator.js';
export function variables_get(block, generator) {
// Variable getter.
const code =
generator.nameDB_.getName(
block.getFieldValue('VAR'), NameType.VARIABLE);
generator.getVariableName(block.getFieldValue('VAR'));
return [code, Order.ATOMIC];
};
@@ -27,7 +25,6 @@ export function variables_set(block, generator) {
const argument0 =
generator.valueToCode(block, 'VALUE', Order.NONE) || '0';
const varName =
generator.nameDB_.getName(
block.getFieldValue('VAR'), NameType.VARIABLE);
generator.getVariableName(block.getFieldValue('VAR'));
return varName + ' = ' + argument0 + '\n';
};