Line continuations in Envision

Line continuations












Home » Resources » Here

The Envision grammar offers both implicit and explicit line continuation mechanisms; i.e. the ability to write code that spreads over multiple lines, as if it was a single line. The explicit line continuation leverage the\ symbol. However when a line ends with a token that is not allowed to be an end-of-line, then the grammar assumes that a line continuation in intended.

Overview

The line continuation rule is: if a sequence (newline, indent) is preceded by a token that cannot-be-at-end-of-line or followed by a token that cannot-be-at-start-of-line, then the (newline, indent) sequence is completely ignored. For example, & is not allowed at end of line, so it is possible to split:
where ThisIsAVeryLongConditionExpression & 
      ThisIsAnotherVeryLongConditionExpression
  A = sum(B)

This syntax is more compact and preferable to the alternative that uses the explicit continuation symbol:
where ThisIsAVeryLongConditionExpression & \
      ThisIsAnotherVeryLongConditionExpression
  A = sum(B)

Similarly, if and at cannot appear at the start of a line, so it is possible to write:
A = sum(B) by [Key, Key, Key]
           at [Key, Key, Key]
           if Condition

Continuation tokens

Only tokens that cannot appear at the end of line are eligible for line continuation. Those tokens are:

  • +, -, ~, not
  • ^, ^*, >>, <<
  • *, /., /, mod, **, +*, -*
  • <=, <, >=, >, ==, !=, ~~, !~
  • &, |
  • :=, =

At the same time, infix keyword tokens cannot-be-at-start-of-line:

  • by, at, if, or, cross, over, sort
  • into
  • as