Commit Graph

40 Commits

Author SHA1 Message Date
Monica Kozbial
d6abf4798e Fixing operator precedence in Lua and and adding test. (#3765)
* Fixing operator precedence in Lua and and adding test.

* Updating golden files.
2020-03-25 14:34:07 -07:00
Neil Fraser
4e2f8e6e02 Use SPDX licences.
This is a followup to #3127.
At the time, SPDX licenses were pending approval by Google.
2020-02-11 13:27:20 -08:00
Sam El-Husseini
72c6aa8699 Block generator warnings (#3353) 2019-10-28 16:20:25 -07:00
Sam El-Husseini
64c52efb5b Resolve warnings in generator code (#3350) 2019-10-28 09:35:40 -07:00
alschmiedt
b19e6a5fbf Remove deprectaed use of Blockly.Procedures.NAME_TYPE (#3301) 2019-10-22 04:33:13 -05:00
Neil Fraser
b46a4fe286 Bring our license format up to date (#3127)
* Google changed from an Inc to an LLC.

This happened back in 2017 but we didn’t notice.  Officially we should update files from Inc to LLC when they are changed as part of regular edits, but this is a nightmare to remember for the next decade.

* Remove project description/titles from licenses

This is no longer part of Google’s header requirements.  Our existing descriptions were useless (“Visual Blocks Editor”) or grossly obselete (“Visual Blocks Language”).

* License no longer requires URL.

* Fix license regexps.
2019-10-02 14:46:56 -07:00
Rachel Fenichel
6f4476c962 Textarea Field, Multiline Block (from acbart) (#2663)
* Field Textarea, text_multiline block, generators
2019-09-11 17:57:46 -07:00
Neil Fraser
e77a9b7e81 Change parseFloat() to Number()
Number() is a bit less forgiving than parseFloat() and is more likely to generate NaN rather than some random number.  An audit of each case shows nowhere that parseFloat()’s features are needed.
2019-08-01 11:36:58 -07:00
Neil Fraser
92c4d6d3a3 Fix colour injection vulnerability.
The new validators already solve this problem, but as a second layer of defence, the generators should also be secured.  Issue #2637
2019-07-15 16:03:55 -07:00
Neil Fraser
05253d0766 Add prefix/suffix to orphaned value blocks.
Also respect suppressPrefixSuffix on loops when generating prefix/suffix with continue/break blocks.
2019-05-17 15:04:39 -07:00
Neil Fraser
e642a77f5d Use conventional prefix/suffix for function calls.
Previously a function call with no return value generated:

  prefix();
  suffix();
  function();

The intent was so the prefix and suffix calls in the function body wouldn’t overlap with the prefix and suffix calls of the function call.  However, this is doomed to be inconsistent with a function call with a return value:

  prefix();
  print(function());
  suffix();

Thus since overlaping must exist, both types of function calls should have consistent suffix locations.
2019-05-17 15:04:39 -07:00
Neil Fraser
04e39c20f8 Fix indentation bug if no xfix exists in function 2019-05-14 17:19:31 -07:00
Neil Fraser
585866a1b6 Revisit function block for return.
Visit (with prefix and suffix) function block when executed.  This commit adds a revisit at the end of the function body when evaluating the return value.
2019-05-14 17:19:31 -07:00
Neil Fraser
c0e14c3a7c Add method to suppress prefix/suffix from blocks.
This allows generators to have more control over the placement of suffix.  Needed for ‘if’ blocks and function calls which require their suffix code to be somewhere other than the end.
Also, add loop’s prefix to ‘break’ blocks, since the loop’s suffix will be the next statement hit.
Also, reuse procedures_callreturn generator for procedures_callnoreturn.
2019-05-14 17:19:31 -07:00
Neil Fraser
25adb40e66 Prefix and suffix edge cases for flow statements.
Call suffix code on break/continue before executing the break/continue.
Call prefix code for enclosing loop before executing continue.
2019-05-14 17:19:31 -07:00
Neil Fraser
0259f8bb48 Add extra suffix when generating if/return block.
Also fix loops in Lua.
2019-05-14 17:19:31 -07:00
Neil Fraser
ba18ae2159 Add STATEMENT_SUFFIX
Also remove need to manually indent INFINITE_LOOP_TRAP.  This is a breaking change for Python users of this property.  However, very few users of this property exist, given that the existing code breaks if the block ID has a $ in it (also fixed in this PR).
2019-05-14 17:19:31 -07:00
Nadya Febiana Djojosantoso
683a738166 Add math_atan2 Lua generator 2018-10-11 14:19:40 -07:00
Neil Fraser
f3a76cc288 Remove unneeded String() and str() calls.
String literals in JS and Python don’t need to be coerced to strings.
2018-09-25 14:00:00 -07:00
Neil Fraser
c8bfc888c8 Throw errors instead of strings. (#1974)
Blocks and generators
2018-07-16 16:33:44 -07:00
Neil Fraser
6203cadcae Move away from math.log10 and math.pow in Lua generators.
Fixes #1695
2018-03-12 11:35:29 -07:00
Rachel Fenichel
bce24fef6b Add generators for dynamic variable blocks. 2018-01-26 17:10:45 -08:00
Nicole Parrot
97ce5b3e4f Fix indentation for function blocks with return statements (#1362)
* fix indentation for the return statement in function blocks that return a value

* Fix hard-coded autoindent, and swap it for Blockly.PHP.INDENT

* Fix hard-coded 2 spaces indent and use language-appropriate global indent
2017-10-17 15:20:11 -07:00
Neil Fraser
f34a2c2ed4 Properly escape IDs in procedure generators. (#1305)
Issue #251 and #1304.
2017-09-04 08:51:16 -07:00
Tim Dawborn
46316c7cea Add a block to reverse a list (#844) 2017-01-21 10:48:42 -08:00
Tim Dawborn
34750bccd8 New blocks text_count, text_replace, and text_reverse (#830)
Includes generators for all languages and units tests on those generators.
2017-01-20 16:08:27 -08:00
Andrew n marshall
e5d25bb686 String reference in JSON string messages (#741)
* Adds message references to message string interpolation, in the form of %{BKY_STRING}.
 * Re-adding CONTROLS_IFELSE block using the new syntax, referencing to CONTROL_IF equivalents.
2016-11-15 15:51:51 -08:00
Rachel Fenichel
82261e3d68 Remove ifelse block and messages' 2016-11-11 17:21:29 -08:00
Andrew n marshall
72ff6d9ead Adding controls_ifelse block (#722)
Adding controls_ifelse, an if/else block that is loaded from JSON and does not use mutators. This gives "else" capability to Android & iOS implementations, which don't support JavaScript mutators.

Added this block to the playground simple toolbox and all generators.
2016-10-31 11:00:39 -07:00
Neil Fraser
591f6bfe4c Revert "Remove apparently unneeded scrub on procedures."
This reverts commit 2be214ca74.
2016-08-24 03:05:30 -07:00
Neil Fraser
2be214ca74 Remove apparently unneeded scrub on procedures. 2016-08-03 18:33:18 -07:00
Monica Kozbial
2b191e897e Adding indexing settings, tests and fixing bugs (#464)
* Add indexing setting for JavaScript Generation

Adding setting to allow for switching between zero and one based indexing for Blockly Blocks such that the generated code will use this flag to determine whether one based or zero based indexing should be used. One based indexing is enabled by default.

* Updating js lists to do zero and one based index

Updated generated JavaScript to change depending on whether one based indexing is enabled or not.

* Updating js text to do zero and one based index

Change so that JavaScript generated for text blocks either assumes blocks use zero or one based index based on setting.

* Start of python indexing

Start of work on allowing one and zero indexing for generated python for lists.

* Fixing bug and lint fixed

Fixing bug caused by not setting the return of concat when concatenating lines for sublist and substring functions. Also renamed these functions to be getSubsequece. Fixed lint errors with spacing

* Converting from if to switch statements

Comverting if statements to switch statements when appropriate and adding spacing.

* Modified sublist JavaScript generation

Added case so that helper function is not generated if not necessary. Helper function is not generated if list length is not needed or if list is a simple block (such as a variable, as oppossed to a function call or list create).

* Stripping unecessary ids

Removing ids from xml file.

* Localisation updates from https://translatewiki.net.

* Fix typo in flyout.js (#403)

* Fix typo in flyout.js (#402)

* Localisation updates from https://translatewiki.net.

* Add indexing setting for JavaScript Generation

Adding setting to allow for switching between zero and one based indexing for Blockly Blocks such that the generated code will use this flag to determine whether one based or zero based indexing should be used. One based indexing is enabled by default.

* Updating js lists to do zero and one based index

Updated generated JavaScript to change depending on whether one based indexing is enabled or not.

* Updating js text to do zero and one based index

Change so that JavaScript generated for text blocks either assumes blocks use zero or one based index based on setting.

* Fixing bug and lint fixed

Fixing bug caused by not setting the return of concat when concatenating lines for sublist and substring functions. Also renamed these functions to be getSubsequece. Fixed lint errors with spacing

* Converting from if to switch statements

Comverting if statements to switch statements when appropriate and adding spacing.

* Modified sublist JavaScript generation

Added case so that helper function is not generated if not necessary. Helper function is not generated if list length is not needed or if list is a simple block (such as a variable, as oppossed to a function call or list create).

* Stripping unecessary ids

Removing ids from xml file.

* Updating generator test

Modifying sublist test and re-formatting spacing between blocks.

* Updating js lists to do zero and one based index

Updated generated JavaScript to change depending on whether one based indexing is enabled or not.

* Updating js text to do zero and one based index

Change so that JavaScript generated for text blocks either assumes blocks use zero or one based index based on setting.

* Fixing bug and lint fixed

Fixing bug caused by not setting the return of concat when concatenating lines for sublist and substring functions. Also renamed these functions to be getSubsequece. Fixed lint errors with spacing

* Converting from if to switch statements

Comverting if statements to switch statements when appropriate and adding spacing.

* Modified sublist JavaScript generation

Added case so that helper function is not generated if not necessary. Helper function is not generated if list length is not needed or if list is a simple block (such as a variable, as oppossed to a function call or list create).

* Stripping unecessary ids

Removing ids from xml file.

* Localisation updates from https://translatewiki.net.

* Localisation updates from https://translatewiki.net.

* Updating js lists to do zero and one based index

Updated generated JavaScript to change depending on whether one based indexing is enabled or not.

* Fixing bug and lint fixed

Fixing bug caused by not setting the return of concat when concatenating lines for sublist and substring functions. Also renamed these functions to be getSubsequece. Fixed lint errors with spacing

* Modified sublist JavaScript generation

Added case so that helper function is not generated if not necessary. Helper function is not generated if list length is not needed or if list is a simple block (such as a variable, as oppossed to a function call or list create).

* Stripping unecessary ids

Removing ids from xml file.

* Updating generator test

Modifying sublist test and re-formatting spacing between blocks.

* Adding tests for indexing and extra cases

Adding tests for indexing with custom block to adjust number based on what indexing is being generated.

* Adding tests and renaming tests

Adding tests for sublist and renaming tests.

* Fixes for order for sublists

Fixes so that parenthesis are generated properly for index for sublist

* Cleaning up test generated code

Changing order returned for unit test adjust index function to generate less unecessary parenthesis.

* Adding tests for order

Adding tests for order, relevant for methods that use index from start (because 1 is added)

* Fixing JS order for getIndex and setIndex

Changing to the correct order type when calling valueToCode in JS generation for getIndex and setIndex.

* Fixed unittest adjustIndex

Fixed uninttest adjustindex to also check whether the ONE_BASED_INDEXING variable has been defined to ensure proper behaviour.

* Fixing lint and formatting for JS/lists

Making line fixes and changing an if/elseif to case statement.

* Tests added to include case for bug found

Added tests with sublist combinations of different where's for the two indices after bug for this found in python.

* Adding and renaming tests

Adding test case for creating a sublist that encompasses the whole list but uses # and #-end instead of first last (applicable for python). Also, renaming tests.

* Adding contant and fixing python lists bugs

Adding contant for ONE_BASED_INDEXING and fixing bugs in python for lists.

* Fixing test get random

Fixing test get random to take into account indexing for return value.

* Adding indexing checkbox to test page

Adding checkbos on test page so that code can be generated for one and zero based indexing. Languages that are generated with zero based indexing that do not have it implemented will fail tests as expected.

* Fixing unittest getremove random

Fixing unittest getremove random to take into account the return value based on indexing.

* Change comparison for getremove random test

Fixed comparison to equal for the return value for getremove random.

* Fixing bugs with lists zero-indexing

Fixing getIndex and getSublist methods to pass for zero-indexed tests.

* Adding test cases and formatting

Adding test cases to text tests, reordering a couple list test, and formatting block spacing.

* Fixing unittest expected value

Fixing expected value fore unit tests for sublist.

* Cleanup

Removing obvious comments, formatting fixes, and naming in generated code in JS.

* Helper function for Python lists

Adding helper function for casting to int for indices.

* Expanding helper to reduce duplicated code

Expanding helper method to also get the property with the correct order and check indexing to reduce duplicated code.

* Cleaning up JS indexing with helper function

Adding helper function for indexing and used it in lists and text.

* Moving helper function and formatting fixes

Moving helper function, formatting fixes, and changing some generated code variable names.

* Fixing python generation for text

Fixing all failinng tests for python and using new helper method.

* Lint fixes and order in indexOf

Making lint fixes and correcting returned order in indexOf.

* Python variable renaming

Renaming a few generated variables.

* Fixing comment and order

Fixing comment to list Blockly.Block type and fixing order because it could be higher.

* Switching back to if

Switching switch back to if statements because there weren't enough cases to warrant for a switch.

* Adding order and fixing lists for Dart

Adding if null operator to operator precedence for Dart. Also, fixing lists implementation to pass unit tests and adding zero-indexing functionality.

* Formatting and lint fixes

Formatting and lint fixes

* Dart text fixed

Fixing Dart text generation to pass unit tests.

* Changing back  to variable

Changing switch condition back to variable.

* Fixing ORDER_OVERRIDES

Inner and outer order was switched .

* Adding bug with order caused by generator change

Flooring order before comparision because of how the order constants were modified.

* Adding list tests

Adding tests for additional cases for lists/

* Adding comment for dart order

Adding comment for Dart ORDER_IF_NULL operator.

* Formatting fixes

Formatting fixes for line indentation.

* Fixing PHP order and lists generation

Fixing PHP order constants and fixing lists so that they pass unit tests.

* Fixing tests

Removing duplicate unit test

* Adding text tests

Adding tests for text.

* Renaming variable and removing unused variable

Renaming variables from exceptionIndex to errorIndex and removing unused at variable.

* Adding missing function call to test

Adding missing funciton call to test that was causing tests to fail when they shouldn't.

* Fixing PHP text generation

Fixing PHP text code generation so it passes unit tests.

* Formatting fixes

Cleaning up code, renamiing a variable.

* Fixing failing subsequence tests

Fixing JS code that failed for sublist/substring tests.

* Fixing intentation

Fixing indentation.

* Fixing Dart sublist/substring

Fixing sublist/substring to include condiiton where FROM_START  (and not throw error by mistake) when zero-indexed.

* Adding order subtraction test

Adding test for checking order for subtraction x- (y - z) x  - (y + z).

* Updating to new PHP power operator

Updating from pow function to ** operator to clean up code.

* Updating to new removeWhere

Updating removeMatching to removeWhere because new version of Dart now use removeWhere.

* Fix for lua rounding assertequals

Adding check for number in equlity check for comparing number for floats.

* Adding test for copy of list

Adding test that checks the list is copied when a sublist is made first-last.

* Formatting and order fixes

Fixing formatting such as indentation and order fixes.

* Adding comment for clarity

Adding comment about how Lua code generation is not supporting zero indexing.

* Changed variable names in code

Changed variable names to follow style guide and changed for loop variable from n to i as is typical.

* Reducing unecessarily generated functions and renaming variables

Reducing number of generated functions using gensym_ by adding parameters to provided function. Renaming variables to make functions more readble.

* Fixing sublist order and sort variable

Fixing order used for valueToCode for sublist and renaming list variable in sort to match rest of code..

* Fixing order constant order

Removing operator () that was incorrect and addiung ~,

* Fixing order and indentation

Fixing order return fro create lists blocks and fixing indentationn for string array.

* Fixing order and renaming variables

Fixing order to be the correct strength and renaming variables to be more readable/

* Changing assert blocks for unit tests

Changing assert blocks to have a value input instead of a field so there is more flexibility in writing tests.

* Cleaning up and adding missing order tests

Adding tests for order for paramters for list blocks that weren't being tested to uncover bugs. Test were also cleaned up/reorganized/renamed to be more readable and shorter vertically (but lines  wider horizontally).

* Compile error fix and order in Dart generation.

Fixing compile error in generated code and incorrect order in get sublist for Dart.

* Fixing typo in getIndex and invalid parameter name

Fixing type in getIndex where list code should have been appended but instead an undefined variable was added. The parameter in lists_sort was changed to my_list because list is a reserved word in python.

* Fixing order, parenthesis bug, and variable declaration in Lua

Fixing incorrect order in Lua. Fixing bug caused by missing parenthesis around ternary operator in code. Variable code was declared with JavaScript syntax, this was fixed to be valid in Lua.

* Adding tests and formatting tests

Adding missing test for order in text/lists. Changing spacing/order of tests and updating comments.

* Fixing error in code

Changing to correct function call in empy tests and changing test name that was duplicated to be more clear.

* Renamed test helper function

* Fixing order and renaming variable in JS generator

Fixing order for charAt and renaming variable in code list_sort from listCode to list to be consistent with rest of code.

* Fixing order for dart text

Fixing roder for dart charAt

* Cleaning up generated code for Dart getIndex

Cleaning up generated code for Dart getIndex so that helper functions aren't generated unecessarily and adding comments.

* Fixing Dart remove random error

Fixing error caused by remove random implementation in Dart. index should have been x but instead was length - x.

* Fixing unit test blocks

Fixing Lua unit test block that should have just returned the number and removing unecessary checks in other blocks because the constant was defined.

* Fixing Lua assert equals block

string.format was throwing an error if one of the values happened to be a boolean.

* Adding tests for create text with number

Adding test for create text with numbers as parameters

* Fixing lua unit test block

Lua unit test block should have added 1

* Removing indexing setting for Lua tests

Removing setting index setting for Lua generation because it is always one-indexed.

* Fixing order and create text

Fixing failing test caused by improper order and fixed create text to properly convert to string when there is one element.

* Running linter on generator code

Running linter on generator code and fixing spacing/indentation problems.

* Editing comments and removing uneeded parenthesis

Editing and adding comments and removing uneeded parenthesis around ternary operator condition.

* Fixing order and changing variable names

Fixing orders that were incorrect and changing variable names to be more descriptive and consistent across code.

* Adding comment about list support and fixes for PHP

Adding comment about how lists are not fully supported for PHP. Adding missing order to PHP and fixing order errors throughout. Fixing regex for variable matching in lists. Cleaning up variable names to be more readable and consistent with other parts of code.

* Reducing complexity for getremove/remove in JS

Reducing complexity in generated code for getremove/remove in JavaScript by replacing unecessary helper function.

* Fixing spacing before inline comments

Ensuring there are two spaces before inline comments.

* Changing JS list copy for clarity

Changing JavaScript list copy to use slice(0) instead of concat for clarity and to use the same pattern as the other sublist methods.

* Changing generated variable name tmp_x

Changing tmp_x to tmpX to follow closer to the correct style for JavaScript.

* Prefixing empy lines between comment text

Prior to this change, comments with an empty line between text did not have a comment prefix before it, resulting in comment blocks that seemed disjoined although they were for the same block. This change affects how the prefix line function works so that those lines will have the prefix (if applicable) while still taking into account the trailing newline character.

* Changing for loops variable names

Changing most for loops to use i as the variable name (or j if applicable) or changing name to be more readable.

* Simplifying provided subsequence function

Simplifying subsequence function to generate a simpler function depending on where combination instead of a larger complex function that works for all where combinations.

* Style fixes

Fixing indentation, comments, and other formatting-type changes based on pull request comments.

* Fixing indentation

Fixing indentation and removing an extra newline.

* Fixing PHP mode implementation

Fixing PHP mode implementation to properlyu return multiple modes if applicable.

* Fixing line too long

Wrapping lines in php/math.js with lines longer than 80 characters.

* Wrapping long lines

Wrapping lines that are too long.

* Changing boolean casing

Changing boolean casing to be lowercase.
2016-07-08 11:43:48 -07:00
Neil Fraser
4b319d461d Reduce unneeded parentheses in JS and Python. 2016-06-20 17:34:36 -07:00
Neil Fraser
fd6f743f0e Remove unneeded generated parens around function calls in indexOf blocks. 2016-06-13 18:49:18 -07:00
Neil Fraser
477562b597 Prevent collisions between user functions and helper functions. 2016-06-12 12:19:14 -07:00
Dan LaLiberte
f28928db83 Update pull request, mostly whitespace and comments. 2016-05-06 10:37:19 -04:00
Dan LaLiberte
c1cfec8dbd Add lists_sort block. 2016-05-04 17:03:24 -04:00
Neil Fraser
a7892d1aee Raise error if statement block returns tuple. 2016-03-18 14:17:31 -07:00
Rodrigo Queiro
37d3ecc304 Fix JSDoc syntax on Blockly.Lua.lists.getIndex_
Also fix a return type warning in one of the branches.
2016-03-14 15:08:49 +01:00
Rodrigo Queiro
a5d3f340e5 Add a Lua code generator
This is based on the JS generator, with a lot of inspiration from Ellen
Spertus's blockly-lua: https://github.com/espertus/blockly-lua

All unit tests pass with Lua 5.3.2.
2016-03-10 10:24:25 +01:00