This is an automated email from the ASF dual-hosted git repository.

kristw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 5ba7fca  docs: update CONTRIBUTING with TypeScript details from 
[SIP-36] (#9185)
5ba7fca is described below

commit 5ba7fcaeea86413857d3618fdeb3c22b95196585
Author: Erik Ritter <[email protected]>
AuthorDate: Mon Feb 24 14:31:23 2020 -0800

    docs: update CONTRIBUTING with TypeScript details from [SIP-36] (#9185)
---
 CONTRIBUTING.md | 178 +++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 112 insertions(+), 66 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b1dd3f4..1d8571a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -24,37 +24,76 @@ little bit helps, and credit will always be given.
 
 ## Table of Contents
 
-- [Orientation](#orientation)
-- [Types of Contributions](#types-of-contributions)
-  - [Report Bugs](#report-bugs)
-  - [Submit Ideas or Feature Requests](#submit-ideas-or-feature-requests)
-  - [Ask Questions](#ask-questions)
-  - [Fix Bugs](#fix-bugs)
-  - [Implement Features](#implement-features)
-  - [Improve Documentation](#improve-documentation)
-  - [Add Translations](#add-translations)
-- [Pull Request Guidelines](#pull-request-guidelines)
-  - [Protocol](#protocol)
-- [Managing Issues and PRs](#managing-issues-and-prs)
-- [Revert Guidelines](#revert-guidelines)
-- [Setup Local Environment for 
Development](#setup-local-environment-for-development)
-  - [Documentation](#documentation)
-  - [Flask server](#flask-server)
-  - [Frontend assets](#frontend-assets)
-- [Testing](#testing)
-  - [JavaScript testing](#javascript-testing)
-  - [Integration testing](#integration-testing)
+- [Contributing](#contributing)
+  - [Table of Contents](#table-of-contents)
+  - [Orientation](#orientation)
+  - [Types of Contributions](#types-of-contributions)
+    - [Report Bug](#report-bug)
+    - [Submit Ideas or Feature Requests](#submit-ideas-or-feature-requests)
+    - [Fix Bugs](#fix-bugs)
+    - [Implement Features](#implement-features)
+    - [Improve Documentation](#improve-documentation)
+    - [Add Translations](#add-translations)
+    - [Ask Questions](#ask-questions)
+  - [Pull Request Guidelines](#pull-request-guidelines)
+    - [Protocol](#protocol)
+      - [Authoring](#authoring)
+      - [Reviewing](#reviewing)
+      - [Merging](#merging)
+      - [Post-merge Responsibility](#post-merge-responsibility)
+  - [Managing Issues and PRs](#managing-issues-and-prs)
+  - [Revert Guidelines](#revert-guidelines)
+  - [Setup Local Environment for 
Development](#setup-local-environment-for-development)
+    - [Documentation](#documentation)
+      - [Images](#images)
+      - [API documentation](#api-documentation)
+    - [Flask server](#flask-server)
+      - [OS Dependencies](#os-dependencies)
+      - [Logging to the browser console](#logging-to-the-browser-console)
+    - [Frontend Assets](#frontend-assets)
+      - [nvm and node](#nvm-and-node)
+      - [Prerequisite](#prerequisite)
+      - [Installing Dependencies](#installing-dependencies)
+      - [Building](#building)
+      - [Docker (docker-compose)](#docker-docker-compose)
+      - [Updating NPM packages](#updating-npm-packages)
+      - [Feature flags](#feature-flags)
+  - [Git Hooks](#git-hooks)
   - [Linting](#linting)
-- [Translating](#translating)
-  - [Enabling language selection](#enabling-language-selection)
-  - [Extracting new strings for 
translation](#extracting-new-strings-for-translation)
-  - [Creating a new language dictionary](#creating-a-new-language-dictionary)
-- [Tips](#tips)
-  - [Adding a new datasource](#adding-a-new-datasource)
-  - [Creating a new visualization type](#creating-a-new-visualization-type)
-  - [Adding a DB migration](#adding-a-db-migration)
-  - [Merging DB migrations](#merging-db-migrations)
-  - [SQL Lab Async](#sql-lab-async)
+  - [Conventions](#conventions)
+    - [Python](#python)
+  - [Typing](#typing)
+    - [Python](#python-1)
+    - [TypeScript](#typescript)
+  - [Testing](#testing)
+    - [Python Testing](#python-testing)
+    - [Frontend Testing](#frontend-testing)
+    - [Integration Testing](#integration-testing)
+  - [Translating](#translating)
+    - [Enabling language selection](#enabling-language-selection)
+    - [Extracting new strings for 
translation](#extracting-new-strings-for-translation)
+    - [Creating a new language dictionary](#creating-a-new-language-dictionary)
+  - [Tips](#tips)
+    - [Adding a new datasource](#adding-a-new-datasource)
+    - [Creating a new visualization type](#creating-a-new-visualization-type)
+    - [Adding a DB migration](#adding-a-db-migration)
+    - [Merging DB migrations](#merging-db-migrations)
+    - [SQL Lab Async](#sql-lab-async)
+  - [Chart Parameters](#chart-parameters)
+    - [Datasource & Chart Type](#datasource--chart-type)
+    - [Time](#time)
+    - [GROUP BY](#group-by)
+    - [NOT GROUPED BY](#not-grouped-by)
+    - [Y Axis 1](#y-axis-1)
+    - [Y Axis 2](#y-axis-2)
+    - [Query](#query)
+    - [Filters Configuration](#filters-configuration)
+    - [Options](#options)
+    - [Chart Options](#chart-options)
+    - [X Axis](#x-axis)
+    - [Y Axis](#y-axis)
+    - [Other](#other)
+    - [Unclassified](#unclassified)
 
 ## Orientation
 
@@ -64,7 +103,7 @@ Here's a list of repositories that contain Superset-related 
packages:
   is the main repository containing the `apache-superset` Python package
   distributed on
   [pypi](https://pypi.org/project/apache-superset/). This repository
-  also includes Superset's main Javascript bundles and react apps under
+  also includes Superset's main TypeScript/JavaScript bundles and react apps 
under
   the 
[superset-frontend](https://github.com/apache/incubator-superset/tree/master/superset-frontend)
   folder.
 - [apache-superset/superset-ui](https://github.com/apache-superset/superset-ui)
@@ -165,7 +204,7 @@ Finally, never submit a PR that will put master branch in 
broken state. If the P
   - If no screenshot is provided, the committers will mark the PR with 
`need:screenshot` label and will not review until screenshot is provided.
 - **Dependencies:** Be careful about adding new dependency and avoid 
unnecessary dependencies.
   - For Python, include it in `setup.py` denoting any specific restrictions 
and in `requirements.txt` pinned to a specific version which ensures that the 
application build is deterministic.
-  - For Javascript, include new libraries in `package.json`
+  - For TypeScript/JavaScript, include new libraries in `package.json`
 - **Tests:** The pull request should include tests, either as doctests, unit 
tests, or both. Make sure to resolve all errors and test failures. See 
[Testing](#testing) for how to run tests.
 - **Documentation:** If the pull request adds functionality, the docs should 
be updated as part of the same PR. Doc string are often sufficient, make sure 
to follow the sphinx compatible standards.
 - **CI:** Reviewers will not review the code until all CI tests are passed. 
Sometimes there can be flaky tests. You can close and open PR to re-run CI 
test. Please report if the issue persists. After the CI fix has been deployed 
to `master`, please rebase your PR.
@@ -239,6 +278,7 @@ Reverting changes that are causing issues in the master 
branch is a normal and e
 - **Difficulty of crafting a fix:** In the case of issues with a clear 
solution, it may be preferable to implement and merge a fix rather than a 
revert.
 
 Should you decide that reverting is desirable, it is the responsibility of the 
Contributor performing the revert to:
+
 - **Contact the interested parties:** The PR's author and the engineer who 
merged the work should both be contacted and informed of the revert.
 - **Provide concise reproduction steps:** Ensure that the issue can be clearly 
understood and duplicated by the original author of the PR.
 - **Put the revert through code review:** The revert must be approved by 
another committer.
@@ -418,7 +458,7 @@ app.logger.info(form_data)
 
 ### Frontend Assets
 
-Frontend assets (JavaScript, CSS, and images) must be compiled in order to 
properly display the web UI. The `superset-frontend` directory contains all 
NPM-managed front end assets. Note that there are additional frontend assets 
bundled with Flask-Appbuilder (e.g. jQuery and bootstrap); these are not 
managed by NPM, and may be phased out in the future.
+Frontend assets (TypeScript, JavaScript, CSS, and images) must be compiled in 
order to properly display the web UI. The `superset-frontend` directory 
contains all NPM-managed front end assets. Note that there are additional 
frontend assets bundled with Flask-Appbuilder (e.g. jQuery and bootstrap); 
these are not managed by NPM, and may be phased out in the future.
 
 #### nvm and node
 
@@ -464,7 +504,7 @@ Alternatively you can use one of the following commands.
 # Start a watcher that recompiles your assets as you modify them (but have to 
manually reload your browser to see changes.)
 npm run dev
 
-# Compile the Javascript and CSS in production/optimized mode for official 
releases
+# Compile the TypeScript/JavaScript and CSS in production/optimized mode for 
official releases
 npm run prod
 ```
 
@@ -523,7 +563,7 @@ Lint the project with:
 # for python
 tox -e flake8
 
-# for javascript
+# for frontend
 cd superset-frontend
 npm ci
 npm run lint
@@ -550,6 +590,39 @@ blueprints = app.config.get("BLUEPRINTS")
 
 or similar as the later will cause typing issues. The former is of type 
`List[Callable]` whereas the later is of type `Optional[List[Callable]]`.
 
+## Typing
+
+### Python
+
+To ensure clarity, consistency, all readability, _all_ new functions should use
+[type hints](https://docs.python.org/3/library/typing.html) and include a
+docstring using Sphinx documentation.
+
+Note per [PEP-484](https://www.python.org/dev/peps/pep-0484/#exceptions) no
+syntax for listing explicitly raised exceptions is proposed and thus the
+recommendation is to put this information in a docstring, i.e.,
+
+```python
+import math
+from typing import Union
+
+
+def sqrt(x: Union[float, int]) -> Union[float, int]:
+    """
+    Return the square root of x.
+
+    :param x: A number
+    :returns: The square root of the given number
+    :raises ValueError: If the number is negative
+    """
+
+    return math.sqrt(x)
+```
+
+### TypeScript
+
+TypeScript is fully supported and is the recommended language for writing all 
new frontend components. When modifying existing functions/components, 
migrating to TypeScript is appreciated, but not required. Examples of migrating 
functions/components to TypeScript can be found in 
[#9162](https://github.com/apache/incubator-superset/pull/9162) and 
[#9180](https://github.com/apache/incubator-superset/pull/9180).
+
 ## Testing
 
 ### Python Testing
@@ -584,36 +657,9 @@ Note that the test environment uses a temporary directory 
for defining the
 SQLite databases which will be cleared each time before the group of test
 commands are invoked.
 
-#### Typing
-
-To ensure clarity, consistency, all readability, _all_ new functions should use
-[type hints](https://docs.python.org/3/library/typing.html) and include a
-docstring using Sphinx documentation.
-
-Note per [PEP-484](https://www.python.org/dev/peps/pep-0484/#exceptions) no
-syntax for listing explicitly raised exceptions is proposed and thus the
-recommendation is to put this information in a docstring, i.e.,
-
-```python
-import math
-from typing import Union
-
-
-def sqrt(x: Union[float, int]) -> Union[float, int]:
-    """
-    Return the square root of x.
-
-    :param x: A number
-    :returns: The square root of the given number
-    :raises ValueError: If the number is negative
-    """
-
-    return math.sqrt(x)
-```
-
-### JavaScript Testing
+### Frontend Testing
 
-We use [Jest](https://jestjs.io/) and [Enzyme](https://airbnb.io/enzyme/) to 
test Javascript. Tests can be run with:
+We use [Jest](https://jestjs.io/) and [Enzyme](https://airbnb.io/enzyme/) to 
test TypeScript/JavaScript. Tests can be run with:
 
 ```bash
 cd superset-frontend
@@ -672,7 +718,7 @@ At runtime, the `_` function will return the translation of 
the given
 string for the current language, or the given string itself
 if no translation is available.
 
-In JavaScript, the technique is similar:
+In TypeScript/JavaScript, the technique is similar:
 we import `t` (simple translation), `tn` (translation containing a number).
 
 ```javascript
@@ -956,7 +1002,7 @@ Note not all fields are correctly catagorized. The fields 
vary based on visualiz
 | `row_limit`                                                                  
                          | _number_                                          | 
The **Row limit** widget                          |
 | `timeseries_limit_metric`                                                    
                          | _object_                                          | 
The **Sort By** widget                            |
 
-The `metric` (or equivalent) and `timeseries_limit_metric` fields are all 
composed of either metric names or the JSON representation of the `AdhocMetric` 
JavaScript type. The `adhoc_filters` is composed of the JSON represent of the 
`AdhocFilter` JavaScript type (which can comprise of columns or metrics 
depending on whether it is a WHERE or HAVING clause). The `all_columns`, 
`all_columns_x`, `columns`, `groupby`, and `order_by_cols` fields all represent 
column names.
+The `metric` (or equivalent) and `timeseries_limit_metric` fields are all 
composed of either metric names or the JSON representation of the `AdhocMetric` 
TypeScript type. The `adhoc_filters` is composed of the JSON represent of the 
`AdhocFilter` TypeScript type (which can comprise of columns or metrics 
depending on whether it is a WHERE or HAVING clause). The `all_columns`, 
`all_columns_x`, `columns`, `groupby`, and `order_by_cols` fields all represent 
column names.
 
 ### Filters Configuration
 

Reply via email to