rokucommunity / rokucommunity/brighterscript

Optional Chaining

Open
#8 4 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

BrighterScript New Language Feature
Dominant language
TypeScript
Stars
208
Forks
68
Avg merge
8h 39m
Merged PRs (30d)
39

Description

When looking for a property value that's deep in a tree-like structure, one often has to check whether intermediate nodes exist:

if user.address AND user.address.street then
  street = user.address.street
end if

Also, many API return either an object or Invalid, and one may want to extract a property from the result only when it is not Invalid:

fooInput = m.top.findNode('fooIinput')

if Invalid <> fooInput then
  fooValue = fooInput.value
end if

The Optional Chaining Operator allows a developer to handle many of those cases without repeating themselves and/or assigning intermediate results in temporary variables:

street = user.address?.street
fooValue = m.top.findNode('fooInput')?.value

My examples above are just tweaks to the one on this repo: https://github.com/tc39/proposal-optional-chaining

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the optional chaining proposal linked in the issue and the existing BrightScript compiler support for language syntax. Confirm how the shown nested-property and Invalid-value examples should behave, then define completion around those examples compiling and producing the expected values.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.