diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 855e454e3ebf..430f6f2d1f07 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -14,7 +14,7 @@ This pull request: This pull request: -- resolves #{{TODO: add issue number}} +- resolves #{{TODO: add issue number}} ## Questions diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5cf845c15be6..9fa348f95362 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -35,7 +35,7 @@ The following behaviors are **expected** of **all** community members: - Be careful in the words you choose. - Use welcoming and inclusive language. - Refrain from demeaning, discriminatory, or harassing behavior and speech. -- Avoid sarcasm in **any** form. What is considered benign by you is seen as caustic by others. +- Avoid sarcasm in **any** form. What is considered benign by you is seen as caustic by others. - Be respectful of differing viewpoints and experiences. - Resist the urge to be defensive if someone takes issue with something you said or did. Even if you feel misinterpreted or unfairly accused, in all likelihood, you probably could have communicated better. **Remember**: it is **your** responsibility to make fellow community members comfortable and feel respected. - Keep unstructured critique to a minimum. If you have solid contribution ideas, make a fork, experiment, and evaluate accordingly. @@ -96,7 +96,7 @@ reported by contacting the [reporting team][reporting]. In your report, please i - Any prior records of behavior either inside or outside the community which can be used to establish prior precedent. - Any additional information that may be helpful. -All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate. Complaint recipients are obligated to maintain confidentiality with regard to the reporter of an incident. +All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate. Complaint recipients are obligated to maintain confidentiality with regard to the reporter of an incident. If an accused person is part of the reporting team, they will recuse themselves from handling your incident. If the reporter is a reporting team member, the complaint will be handled by a different member of the reporting team. @@ -124,7 +124,7 @@ This is a living document and may be updated over time. Refer to the [git histor ## Attribution -This Code of Conduct borrows heavily from +This Code of Conduct borrows heavily from - [npm Code of Conduct][npm-code-of-conduct] - [#node.js IRC policy on trolling][nodejs-irc] diff --git a/FAQ.md b/FAQ.md index 4338a4ef11cb..4e61b3a84a7a 100644 --- a/FAQ.md +++ b/FAQ.md @@ -160,7 +160,7 @@ The popularity of Node.js due to its ease-of-use and growing ubiquity in the HTT - a serverless application which performs a machine learning computation without needing to install and bundle all of, e.g., Python, [NumPy][numpy], and [SciPy][scipy], thus saving time, money, and resources (all by virtue of Node.js' dominance in serverless cloud offerings, such as AWS Lambda, Google Cloud, and Microsoft Azure). - browserless model computation done entirely in JavaScript. -While other languages and platforms exist which _may_ be better suited for specific use cases, particularly those requiring bare metal performance or involving massive data sets, when considered in totality, the opinion of this project is that JavaScript (and Node.js) provides a comparable, if not better, environment for numerical and scientific computation than other competitor environments. +While other languages and platforms exist which _may_ be better suited for specific use cases, particularly those requiring bare metal performance or involving massive data sets, when considered in totality, the opinion of this project is that JavaScript (and Node.js) provides a comparable, if not better, environment for numerical and scientific computation than other competitor environments. @@ -185,7 +185,7 @@ You should use JavaScript because 9. **Community**: you want to leverage the continually growing JavaScript and Node.js community. JavaScript has one of the [largest][stackoverflow-developer-survey] and most diverse developer [ecosystems][stackoverflow-developer-survey]. Using JavaScript means greater access to help, expertise, and resources, including tutorials, workshops, and education materials. 10. **Visualization**: you want tighter integration between computation and data visualization. Other languages require intermediary layers to translate computational results into visual artifacts. These layers often involve network requests, longer latency, and increased complexity. Using JavaScript for numerical computation removes the need for intermediaries, allowing immediate and more transparent integration between computation and visualization. 11. **Mad science**: you are interested in mad science applications. Certain applications are only possible in JavaScript due to tight integration between the language and web APIs (e.g., client-based peer-to-peer distributed computing). -12. **Future**: you want to be part of the future: a future where numerical and scientific computation in JavaScript is not only possible, but also inevitable. +12. **Future**: you want to be part of the future: a future where numerical and scientific computation in JavaScript is not only possible, but also inevitable. @@ -200,7 +200,7 @@ You should use JavaScript because Native [add-ons][node-add-ons] have several disadvantages: 1. **Maintenance**: historically, native [add-ons][node-add-ons] have entailed considerable maintenance costs. Due to a rapidly changing V8 API and a V8 development approach which does not prioritize backward compatibility, each successive Node.js version required rewriting native [add-ons][node-add-ons] to accommodate breaking changes. To address initially this problem, the Native Abstractions for Node.js project ([NAN][node-nan]) provided a V8 API abstraction layer which [add-ons][node-add-ons] could target, thus allowing an [add-on][node-add-ons] to maintain compatibility between Node.js versions. While [NAN][node-nan] did reduce maintenance costs, costs were not entirely eliminated. [NAN][node-nan] has been superseded by an [ABI stable API][node-napi] (N-API), which provides a similar abstraction layer but also across VMs (e.g., V8 and Chakra). While N-API significantly reduces native add-on maintenance burden, that burden is not zero. -2. **Portability**: the primary means for building native [add-ons][node-add-ons] is [node-gyp][node-gyp], a tool which wraps [GYP][gyp] (a deprecated build tool formerly used by the Chromium team) and aims to provide a cross-platform approach for compiling Node.js native [add-ons][node-add-ons]. While [GYP][gyp] is suitable for many native [add-on][node-add-ons] use cases, the tool is less well-suited for building numerical and scientific computing libraries. In particular, [GYP][gyp] is primarily oriented toward compiling C/C++ libraries and applications. This orientation is problematic because numerical computing libraries often require the ability to not only compile C/C++, but also Fortran, CUDA, and other compiled languages. On Linux systems, [GYP][gyp] can leverage the GNU compiler toolchain, including [gfortran][gfortran]; however, [node-gyp][node-gyp]'s reliance on Microsoft Visual Studio (MSVS) [prevents][msvs-fortran-issue] compiling [add-ons][node-add-ons] containing Fortran code on Windows. Furthermore, building [add-ons][node-add-ons] on Windows requires installing Windows [build tools][node-windows-build-tools], and, currently, the [recommended][node-windows-build-tools] means of installation is not backward compatible with Node.js environments prior to version `4`. Lastly, while pre-building binaries is one way to circumvent compilation and portability issues, cross-compilation is neither straightforward nor foolproof and does not obviate the need for portable compilation (see debugging below). +2. **Portability**: the primary means for building native [add-ons][node-add-ons] is [node-gyp][node-gyp], a tool which wraps [GYP][gyp] (a deprecated build tool formerly used by the Chromium team) and aims to provide a cross-platform approach for compiling Node.js native [add-ons][node-add-ons]. While [GYP][gyp] is suitable for many native [add-on][node-add-ons] use cases, the tool is less well-suited for building numerical and scientific computing libraries. In particular, [GYP][gyp] is primarily oriented toward compiling C/C++ libraries and applications. This orientation is problematic because numerical computing libraries often require the ability to not only compile C/C++, but also Fortran, CUDA, and other compiled languages. On Linux systems, [GYP][gyp] can leverage the GNU compiler toolchain, including [gfortran][gfortran]; however, [node-gyp][node-gyp]'s reliance on Microsoft Visual Studio (MSVS) [prevents][msvs-fortran-issue] compiling [add-ons][node-add-ons] containing Fortran code on Windows. Furthermore, building [add-ons][node-add-ons] on Windows requires installing Windows [build tools][node-windows-build-tools], and, currently, the [recommended][node-windows-build-tools] means of installation is not backward compatible with Node.js environments prior to version `4`. Lastly, while pre-building binaries is one way to circumvent compilation and portability issues, cross-compilation is neither straightforward nor foolproof and does not obviate the need for portable compilation (see debugging below). 3. **Web browsers**: native [add-ons][node-add-ons] are not compatible with or portable to web browsers. ([WebAssembly][wasm] will not change this fact.) 4. **Complexity**: compilation presupposes the existence of compilers (e.g., [gfortran][gfortran]) and other tooling in order to successfully compile, thus often requiring out-of-band installation, setup, and configuration. In short, compilation increases complexity and increases the risk that something can and will go wrong. 5. **Development**: native Node.js [add-ons][node-add-ons] require significant upfront development costs compared to porting implementations to JavaScript. Creating a native [add-on][node-add-ons] entails more than writing a simple wrapper around an existing C/C++ library; the process involves additional tooling, testing, and development procedures, all requiring time and effort. These costs are acutely apparent during iteration cycles targeting multiple platforms. In comparison, as a higher-level language, JavaScript facilitates faster development, has built-in portability, and has minimized performance costs. @@ -272,13 +272,13 @@ The reasons are as follows: -1. **underspecified standard**: the ECMAScript specification for the standard Math library is underspecified, but not without merit. Namely, underspecification allows those implementing the specification to make trade-offs between speed and accuracy. Were the specification to mandate a particular algorithm, e.g., for `Math.sin`, implementers would be locked into **always** using a particular implementation. Especially for special functions, different algorithms will yield different results under varying conditions. Thus, to change an underlying algorithm would mean to break backward compatibility. By not committing themselves to any hard backward compatibility constraints, implementors maintain a degree of flexibility, including the ability to use algorithms which cater to a particular user base (gaming versus numerical computing). In which case, underspecification has advantages. +1. **underspecified standard**: the ECMAScript specification for the standard Math library is underspecified, but not without merit. Namely, underspecification allows those implementing the specification to make trade-offs between speed and accuracy. Were the specification to mandate a particular algorithm, e.g., for `Math.sin`, implementers would be locked into **always** using a particular implementation. Especially for special functions, different algorithms will yield different results under varying conditions. Thus, to change an underlying algorithm would mean to break backward compatibility. By not committing themselves to any hard backward compatibility constraints, implementors maintain a degree of flexibility, including the ability to use algorithms which cater to a particular user base (gaming versus numerical computing). In which case, underspecification has advantages. 2. **cross-browser variability**: an underspecified standard, however, has disadvantages. Because implementors are free to choose underlying algorithms, relying exclusively on built-in Math functionality renders portability across more than one environment impossible. Even if all implementors happened to use the same underlying algorithm, a developer cannot, _a priori_, **guarantee** or assume that only one algorithm is implemented. The default assumption must be: _if more than one algorithm can exist, more than one algorithm will exist_. 3. **no single codebase**: unlike other standard libraries (e.g., Golang, Python, Julia, etc), JavaScript does not have a single shared codebase. Each browser manufacturer has their own implementation and independent codebase with varying architecture and organization. More fundamentally, a common _implementation_ does **not** exist; only common _interfaces_ exist. Thus, a developer wanting to write a numerical application must navigate and understand multiple sources of truth. Such expenditures incur significant overhead, especially when wanting to file issues, submit patches, or standardize a particular algorithm. For example, a patch in Chrome does not translate to a patch in all other web browsers. Because each implementor is free to erect a protected castle, those writing numerical algorithms are resigned to treating the standard Math library as a black box and must always cater to the lowest common denominator (which is often the empirically determined slowest and/or least precise algorithm). -4. **versioning**: a developer does not have the freedom to choose which version of a particular algorithm she is given. In an "evergreen" environment, her application is only guaranteed a consistent interface, not an underlying implementation. Each background update may influence results in subtle ways and introduce bugs and unforeseen variability. A developer relying exclusively on standard library built-ins cannot assume reproducibility upon relaunching a browser. Thus, not only is cross-browser portability problematic, but same-browser-different-version portability is problematic. +4. **versioning**: a developer does not have the freedom to choose which version of a particular algorithm she is given. In an "evergreen" environment, her application is only guaranteed a consistent interface, not an underlying implementation. Each background update may influence results in subtle ways and introduce bugs and unforeseen variability. A developer relying exclusively on standard library built-ins cannot assume reproducibility upon relaunching a browser. Thus, not only is cross-browser portability problematic, but same-browser-different-version portability is problematic. 5. **required shims**: because no common codebase exists and implementors make mistakes, application developers are dependent on shims (i.e., libraries which ensure consistent implementations across browsers, provide missing built-in functionality, and patch bugs). The issue here, of course, is that, if an application developer must supply a shim, reduced network cost due to the presence of built-ins is non-existent: an implementation is sent over the network regardless in order to patch a possibly buggy environment. While a developer could use browser sniffing and HTTP2 to lazily load patches, such practices incur a performance cost. Accordingly, if an implementation is sent irrespective of whether an environment provides an implementation natively, why does an environment need to guarantee the existence of an implementation in the first place? @@ -380,7 +380,7 @@ NOTE: see https://nodejs.org/api/worker_threads.html - **Consistency**: package structure, documentation, testing, and code style vary widely, often as artifacts of author taste and eccentricities. By adhering to a single style, library consumers can focus on implementation details, rather than continual and arbitrary style distractions. - **Quality**: packages range from extremely high quality to extremely poor quality, with the distribution of packages skewed toward the latter end of the spectrum. Any reimplementation of existing package functionality is done to ensure the same high standard and quality across all project modules. -- **Control**: bringing functionality "in-house" enables control of release cycles, testing, distribution, interface design, and API changes. +- **Control**: bringing functionality "in-house" enables control of release cycles, testing, distribution, interface design, and API changes. @@ -592,74 +592,74 @@ In general, far too many developers are oblivious to the module resolution [algo ```text / - app/ - index.js - a.js - b.js - node_modules/ # => local app dependencies - debug/ - index.js - logger/ - index.js - routes/ - index.js - login/ - index.js - login.js - post.js - onerror.js - logout/ - index.js - logout.js - post.js - onerror.js - node_modules/ # => local routes dependencies - start/ - index.js - end/ - index.js - response-time/ - index.js - models/ - index.js - c.js - d.js - user/ - index.js - e.js - f.js - node_modules/ # => local user model dependencies - foo/ - index.js - bar/ - index.js - data/ - index.js - g.js - h.js - i.js - node_modules/ # => local data model dependencies - transform/ - index.js - analyze/ - index.js - morph/ - index.js - node_modules/ # => local models dependencies - db-connect/ - index.js - db-get/ - index.js - db-set/ - index.js - db-update/ - index.js - db-delete/ - index.js - node_modules/ # => external dependencies - beep/ - boop/ - bop/ + app/ + index.js + a.js + b.js + node_modules/ # => local app dependencies + debug/ + index.js + logger/ + index.js + routes/ + index.js + login/ + index.js + login.js + post.js + onerror.js + logout/ + index.js + logout.js + post.js + onerror.js + node_modules/ # => local routes dependencies + start/ + index.js + end/ + index.js + response-time/ + index.js + models/ + index.js + c.js + d.js + user/ + index.js + e.js + f.js + node_modules/ # => local user model dependencies + foo/ + index.js + bar/ + index.js + data/ + index.js + g.js + h.js + i.js + node_modules/ # => local data model dependencies + transform/ + index.js + analyze/ + index.js + morph/ + index.js + node_modules/ # => local models dependencies + db-connect/ + index.js + db-get/ + index.js + db-set/ + index.js + db-update/ + index.js + db-delete/ + index.js + node_modules/ # => external dependencies + beep/ + boop/ + bop/ ``` where `g.js` diff --git a/ROADMAP.md b/ROADMAP.md index 6a380dcc5839..520608fcc961 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -36,7 +36,7 @@ The third major theme is data visualization. Building on the first and second th The fourth major theme is automation. Automation is critical for the project's ability to scale and to streamline the development experience. This work will make stdlib one of the most innovative and developer friendly open source projects. -Last, the final theme is documentation. Part of this effort will be continuing to build a web presence and demonstrating the need and importance for stdlib. This work will enable the project to grow and attract both users and contributors. +Last, the final theme is documentation. Part of this effort will be continuing to build a web presence and demonstrating the need and importance for stdlib. This work will enable the project to grow and attract both users and contributors. ## Details diff --git a/bin/cli_commands.json b/bin/cli_commands.json index bb3c9e94231f..6174cd84fef3 100644 --- a/bin/cli_commands.json +++ b/bin/cli_commands.json @@ -1,956 +1,956 @@ [ - { - "command": "help [command]", - "description": "Print a help message.", - "path": "", - "group": "general" - }, - { - "command": "arch", - "description": "Operating system CPU architecture.", - "path": "@stdlib/os/arch", - "group": "system" - }, - { - "command": "bench", - "description": "Run JavaScript benchmark files.", - "path": "@stdlib/bench", - "group": "benchmarking" - }, - { - "command": "bundle-pkg-list", - "description": "Bundle a list of stdlib packages.", - "path": "@stdlib/_tools/bundle/pkg-list", - "group": "tools" - }, - { - "command": "capitalize", - "description": "Capitalize the first character in a string.", - "path": "@stdlib/string/capitalize", - "group": "utilities" - }, - { - "command": "configdir", - "description": "Configuration directory path.", - "path": "@stdlib/os/configdir", - "group": "system" - }, - { - "command": "convert-path", - "description": "Convert between Windows and POSIX paths.", - "path": "@stdlib/utils/convert-path", - "group": "utilities" - }, - { - "command": "cwd", - "description": "Current working directory.", - "path": "@stdlib/process/cwd", - "group": "system" - }, - { - "command": "datasets", - "description": "Retrieve a dataset.", - "path": "@stdlib/datasets", - "group": "general" - }, - { - "command": "day-of-quarter", - "description": "Calculate day of quarter.", - "path": "@stdlib/time/day-of-quarter", - "group": "time" - }, - { - "command": "day-of-year", - "description": "Calculate day of year.", - "path": "@stdlib/time/day-of-year", - "group": "time" - }, - { - "command": "days-in-month", - "description": "Calculate the number of days in a month.", - "path": "@stdlib/time/days-in-month", - "group": "time" - }, - { - "command": "days-in-year", - "description": "Calculate the number of days in a year.", - "path": "@stdlib/time/days-in-year", - "group": "time" - }, - { - "command": "ends-with", - "description": "Test if a string ends with another string.", - "path": "@stdlib/string/ends-with", - "group": "utilities" - }, - { - "command": "exists", - "description": "Test if a file exists.", - "path": "@stdlib/fs/exists", - "group": "filesystem" - }, - { - "command": "from-code-point", - "description": "Create a string from code points.", - "path": "@stdlib/string/from-code-point", - "group": "utilities" - }, - { - "command": "has-arraybuffer-support", - "description": "Detect ArrayBuffer support.", - "path": "@stdlib/assert/has-arraybuffer-support", - "group": "assert" - }, - { - "command": "has-async-await-support", - "description": "Detect async/await support.", - "path": "@stdlib/assert/has-async-await-support", - "group": "assert" - }, - { - "command": "has-async-iterator-symbol-support", - "description": "Detect Symbol.asyncIterator support.", - "path": "@stdlib/assert/has-async-iterator-symbol-support", - "group": "assert" - }, - { - "command": "has-class-support", - "description": "Detect ES6 class support.", - "path": "@stdlib/assert/has-class-support", - "group": "assert" - }, - { - "command": "has-float32array-support", - "description": "Detect Float32Array support.", - "path": "@stdlib/assert/has-float32array-support", - "group": "assert" - }, - { - "command": "has-float64array-support", - "description": "Detect Float64Array support.", - "path": "@stdlib/assert/has-float64array-support", - "group": "assert" - }, - { - "command": "has-function-name-support", - "description": "Detect function name support.", - "path": "@stdlib/assert/has-function-name-support", - "group": "assert" - }, - { - "command": "has-generator-support", - "description": "Detect generator support.", - "path": "@stdlib/assert/has-generator-support", - "group": "assert" - }, - { - "command": "has-int16array-support", - "description": "Detect Int16Array support.", - "path": "@stdlib/assert/has-int16array-support", - "group": "assert" - }, - { - "command": "has-int32array-support", - "description": "Detect Int32Array support.", - "path": "@stdlib/assert/has-int32array-support", - "group": "assert" - }, - { - "command": "has-int8array-support", - "description": "Detect Int8Array support.", - "path": "@stdlib/assert/has-int8array-support", - "group": "assert" - }, - { - "command": "has-iterator-symbol-support", - "description": "Detect Symbol.iterator support.", - "path": "@stdlib/assert/has-iterator-symbol-support", - "group": "assert" - }, - { - "command": "has-map-support", - "description": "Detect Map support.", - "path": "@stdlib/assert/has-map-support", - "group": "assert" - }, - { - "command": "has-node-buffer-support", - "description": "Detect Node buffer support.", - "path": "@stdlib/assert/has-node-buffer-support", - "group": "assert" - }, - { - "command": "has-proxy-support", - "description": "Detect Proxy support.", - "path": "@stdlib/assert/has-proxy-support", - "group": "assert" - }, - { - "command": "has-set-support", - "description": "Detect Set support.", - "path": "@stdlib/assert/has-set-support", - "group": "assert" - }, - { - "command": "has-sharedarraybuffer-support", - "description": "Detect SharedArrayBuffer support.", - "path": "@stdlib/assert/has-sharedarraybuffer-support", - "group": "assert" - }, - { - "command": "has-symbol-support", - "description": "Detect Symbol support.", - "path": "@stdlib/assert/has-symbol-support", - "group": "assert" - }, - { - "command": "has-tostringtag-support", - "description": "Detect Symbol.toStringTag support.", - "path": "@stdlib/assert/has-tostringtag-support", - "group": "assert" - }, - { - "command": "has-uint16array-support", - "description": "Detect Uit16Array support.", - "path": "@stdlib/assert/has-uint16array-support", - "group": "assert" - }, - { - "command": "has-uint32array-support", - "description": "Detect Uit32Array support.", - "path": "@stdlib/assert/has-uint32array-support", - "group": "assert" - }, - { - "command": "has-uint8array-support", - "description": "Detect Uit8Array support.", - "path": "@stdlib/assert/has-uint8array-support", - "group": "assert" - }, - { - "command": "has-uint8clampedarray-support", - "description": "Detect Uit8ClampedArray support.", - "path": "@stdlib/assert/has-uint8clampedarray-support", - "group": "assert" - }, - { - "command": "has-wasm-support", - "description": "Detect WebAssembly support.", - "path": "@stdlib/assert/has-wasm-support", - "group": "assert" - }, - { - "command": "has-weakmap-support", - "description": "Detect WeakMap support.", - "path": "@stdlib/assert/has-weakmap-support", - "group": "assert" - }, - { - "command": "has-weakset-support", - "description": "Detect WeakSet support.", - "path": "@stdlib/assert/has-weakset-support", - "group": "assert" - }, - { - "command": "homedir", - "description": "Home directory path.", - "path": "@stdlib/os/homedir", - "group": "system" - }, - { - "command": "hours-in-month", - "description": "Calculate the number of hours in a month.", - "path": "@stdlib/time/hours-in-month", - "group": "time" - }, - { - "command": "hours-in-year", - "description": "Calculate the number of hours in a year.", - "path": "@stdlib/time/hours-in-year", - "group": "time" - }, - { - "command": "iso-weeks-in-year", - "description": "Calculate the number of ISO weeks in a year.", - "path": "@stdlib/time/iso-weeks-in-year", - "group": "time" - }, - { - "command": "is-absolute-path", - "description": "Assert an absolute path.", - "path": "@stdlib/assert/is-absolute-path", - "group": "assert" - }, - { - "command": "is-alphagram", - "description": "Assert if a value is an alphagram.", - "path": "@stdlib/assert/is-alphagram", - "group": "assert" - }, - { - "command": "is-alphanumeric", - "description": "Assert if a value is alphanumeric.", - "path": "@stdlib/assert/is-alphanumeric", - "group": "assert" - }, - { - "command": "is-anagram", - "description": "Assert if a value is an anagram.", - "path": "@stdlib/assert/is-anagram", - "group": "assert" - }, - { - "command": "is-ascii", - "description": "Assert if a value is ASCII.", - "path": "@stdlib/assert/is-ascii", - "group": "assert" - }, - { - "command": "is-binary-string", - "description": "Assert if a value is a binary string.", - "path": "@stdlib/assert/is-binary-string", - "group": "assert" - }, - { - "command": "is-capitalized", - "description": "Assert if a value is capitalized.", - "path": "@stdlib/assert/is-capitalized", - "group": "assert" - }, - { - "command": "is-digit-string", - "description": "Assert if a value is a digit string.", - "path": "@stdlib/assert/is-digit-string", - "group": "assert" - }, - { - "command": "is-email-address", - "description": "Assert if a value is an email address.", - "path": "@stdlib/assert/is-email-address", - "group": "assert" - }, - { - "command": "is-hex-string", - "description": "Assert if a value is a hexadecimal string.", - "path": "@stdlib/assert/is-hex-string", - "group": "assert" - }, - { - "command": "is-leap-year", - "description": "Assert if a leap year.", - "path": "@stdlib/assert/is-leap-year", - "group": "assert" - }, - { - "command": "is-little-endian", - "description": "Assert if little endian.", - "path": "@stdlib/assert/is-little-endian", - "group": "assert" - }, - { - "command": "is-lowercase", - "description": "Assert if a value is lowercase.", - "path": "@stdlib/assert/is-lowercase", - "group": "assert" - }, - { - "command": "is-regexp-string", - "description": "Assert if a value is a regexp string.", - "path": "@stdlib/assert/is-regexp-string", - "group": "assert" - }, - { - "command": "is-unc-path", - "description": "Assert a UNC path.", - "path": "@stdlib/assert/is-unc-path", - "group": "assert" - }, - { - "command": "is-uppercase", - "description": "Assert if a value is uppercase.", - "path": "@stdlib/assert/is-uppercase", - "group": "assert" - }, - { - "command": "is-uri", - "description": "Assert if a value is a URI.", - "path": "@stdlib/assert/is-uri", - "group": "assert" - }, - { - "command": "is-whitespace", - "description": "Assert if a value is only whitespace.", - "path": "@stdlib/assert/is-whitespace", - "group": "assert" - }, - { - "command": "js-eval", - "description": "Evaluate a JavaScript string.", - "path": "@stdlib/utils/eval", - "group": "utilities" - }, - { - "command": "library-manifest", - "description": "Load a manifest for compiling source files.", - "path": "@stdlib/utils/library-manifest", - "group": "meta" - }, - { - "command": "lpad", - "description": "Left pad a string.", - "path": "@stdlib/string/left-pad", - "group": "utilities" - }, - { - "command": "ltrim", - "description": "Left trim a string.", - "path": "@stdlib/string/left-trim", - "group": "utilities" - }, - { - "command": "lowercase", - "description": "Lowercase a string.", - "path": "@stdlib/string/lowercase", - "group": "utilities" - }, - { - "command": "ls", - "description": "List stdlib package names.", - "path": "@stdlib/_tools/pkgs/names", - "group": "meta" - }, - { - "command": "ls-tree", - "description": "Show stdlib package tree.", - "path": "@stdlib/_tools/pkgs/tree", - "group": "meta" - }, - { - "command": "minutes-in-month", - "description": "Calculate the number of minutes in a month.", - "path": "@stdlib/time/minutes-in-month", - "group": "time" - }, - { - "command": "minutes-in-year", - "description": "Calculate the number of minutes in a year.", - "path": "@stdlib/time/minutes-in-year", - "group": "time" - }, - { - "command": "node-version", - "description": "Node.js version.", - "path": "@stdlib/process/node-version", - "group": "meta" - }, - { - "command": "now", - "description": "Number of seconds since the epoch.", - "path": "@stdlib/time/now", - "group": "time" - }, - { - "command": "ns", - "description": "Print stdlib namespace.", - "path": "@stdlib/namespace", - "group": "meta" - }, - { - "command": "num-cpus", - "description": "Number of CPUs.", - "path": "@stdlib/os/num-cpus", - "group": "system" - }, - { - "command": "random-arcsine", - "description": "Arcsine distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/arcsine", - "group": "random" - }, - { - "command": "random-bernoulli", - "description": "Bernoulli distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/bernoulli", - "group": "random" - }, - { - "command": "random-beta", - "description": "Beta distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/beta", - "group": "random" - }, - { - "command": "random-betaprime", - "description": "Beta prime distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/betaprime", - "group": "random" - }, - { - "command": "random-box-muller", - "description": "Box-Muller pseudorandom numbers.", - "path": "@stdlib/random/streams/box-muller", - "group": "random" - }, - { - "command": "random-cauchy", - "description": "Cauchy distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/cauchy", - "group": "random" - }, - { - "command": "random-chi", - "description": "Chi distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/chi", - "group": "random" - }, - { - "command": "random-chisquare", - "description": "Chi-square distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/chisquare", - "group": "random" - }, - { - "command": "random-cosine", - "description": "Raised cosine distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/cosine", - "group": "random" - }, - { - "command": "random-discrete-uniform", - "description": "Uniformly distributed pseudorandom integers.", - "path": "@stdlib/random/streams/discrete-uniform", - "group": "random" - }, - { - "command": "random-erlang", - "description": "Erlang distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/erlang", - "group": "random" - }, - { - "command": "random-exponential", - "description": "Exponentially distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/exponential", - "group": "random" - }, - { - "command": "random-f", - "description": "F distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/f", - "group": "random" - }, - { - "command": "random-gamma", - "description": "Gamma distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/gamma", - "group": "random" - }, - { - "command": "random-geometric", - "description": "Geometric distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/geometric", - "group": "random" - }, - { - "command": "random-gumbel", - "description": "Gumbel distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/gumbel", - "group": "random" - }, - { - "command": "random-improved-ziggurat", - "description": "Improved Ziggurat pseudorandom numbers.", - "path": "@stdlib/random/streams/improved-ziggurat", - "group": "random" - }, - { - "command": "random-invgamma", - "description": "Inverse gamma distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/invgamma", - "group": "random" - }, - { - "command": "random-kumaraswamy", - "description": "Kumaraswamy distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/kumaraswamy", - "group": "random" - }, - { - "command": "random-laplace", - "description": "Laplace distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/laplace", - "group": "random" - }, - { - "command": "random-levy", - "description": "Lévy distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/levy", - "group": "random" - }, - { - "command": "random-logistic", - "description": "Logistic distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/logistic", - "group": "random" - }, - { - "command": "random-lognormal", - "description": "Lognormal distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/lognormal", - "group": "random" - }, - { - "command": "random-minstd", - "description": "Park and Miller LCG pseudorandom numbers.", - "path": "@stdlib/random/streams/minstd", - "group": "random" - }, - { - "command": "random-minstd-shuffle", - "description": "Shuffled LCG pseudorandom numbers.", - "path": "@stdlib/random/streams/minstd-shuffle", - "group": "random" - }, - { - "command": "random-mt19937", - "description": "32-bit Mersenne Twister pseudorandom numbers.", - "path": "@stdlib/random/streams/mt19937", - "group": "random" - }, - { - "command": "random-normal", - "description": "Normally distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/normal", - "group": "random" - }, - { - "command": "random-pareto-type1", - "description": "Pareto (type 1) distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/pareto-type1", - "group": "random" - }, - { - "command": "random-poisson", - "description": "Poisson distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/poisson", - "group": "random" - }, - { - "command": "random-randi", - "description": "Pseudorandom numbers having integer values.", - "path": "@stdlib/random/streams/randi", - "group": "random" - }, - { - "command": "random-randn", - "description": "Normally distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/randn", - "group": "random" - }, - { - "command": "random-randu", - "description": "Pseudorandom numbers between 0 and 1.", - "path": "@stdlib/random/streams/randu", - "group": "random" - }, - { - "command": "random-Rayleigh", - "description": "Rayleigh distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/rayleigh", - "group": "random" - }, - { - "command": "random-t", - "description": "Student's t distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/t", - "group": "random" - }, - { - "command": "random-uniform", - "description": "Uniformly distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/uniform", - "group": "random" - }, - { - "command": "random-weibull", - "description": "Weibull distributed pseudorandom numbers.", - "path": "@stdlib/random/streams/weibull", - "group": "random" - }, - { - "command": "open-url", - "description": "Open a URL.", - "path": "@stdlib/utils/open-url", - "group": "utilities" - }, - { - "command": "padstr", - "description": "Pad a string.", - "path": "@stdlib/string/pad", - "group": "utilities" - }, - { - "command": "parallel", - "description": "Execute scripts in parallel.", - "path": "@stdlib/utils/parallel", - "group": "utilities" - }, - { - "command": "percent-encode", - "description": "Percent-encode a UTF-16 encoded string.", - "path": "@stdlib/string/percent-encode", - "group": "utilities" - }, - { - "command": "platform", - "description": "Platform.", - "path": "@stdlib/os/platform", - "group": "system" - }, - { - "command": "quarter-of-year", - "description": "Calculate the quarter of a year.", - "path": "@stdlib/time/quarter-of-year", - "group": "time" - }, - { - "command": "read-dir", - "description": "Read all files in a directory.", - "path": "@stdlib/fs/read-dir", - "group": "filesystem" - }, - { - "command": "read-file", - "description": "Read a file.", - "path": "@stdlib/fs/read-file", - "group": "filesystem" - }, - { - "command": "read-file-list", - "description": "Read a list of files.", - "path": "@stdlib/fs/read-file-list", - "group": "filesystem" - }, - { - "command": "realmax", - "description": "Maximum representable finite value.", - "path": "@stdlib/utils/real-max", - "group": "utilities" - }, - { - "command": "realmin", - "description": "Minimum representable finite value.", - "path": "@stdlib/utils/real-min", - "group": "utilities" - }, - { - "command": "remove-first", - "description": "Remove the first character in a string.", - "path": "@stdlib/string/remove-first", - "group": "utilities" - }, - { - "command": "remove-last", - "description": "Remove the last character in a string.", - "path": "@stdlib/string/remove-last", - "group": "utilities" - }, - { - "command": "remove-punctuation", - "description": "Remove punctuation characters from a string.", - "path": "@stdlib/string/remove-punctuation", - "group": "utilities" - }, - { - "command": "remove-utf8-bom", - "description": "Remove a UTF-8 byte order mark (BOM).", - "path": "@stdlib/string/remove-first", - "group": "utilities" - }, - { - "command": "remove-words", - "description": "Remove a list of words from a string.", - "path": "@stdlib/string/remove-words", - "group": "utilities" - }, - { - "command": "rename", - "description": "Rename a file.", - "path": "@stdlib/fs/rename", - "group": "filesystem" - }, - { - "command": "repstr", - "description": "Repeat a string.", - "path": "@stdlib/string/repeat", - "group": "utilities" - }, - { - "command": "repl", - "description": "Start a REPL.", - "path": "@stdlib/repl", - "group": "general" - }, - { - "command": "repl-presentation", - "description": "Start a REPL presentation.", - "path": "@stdlib/repl/presentation", - "group": "general" - }, - { - "command": "replace", - "description": "Replace search occurrences in a string.", - "path": "@stdlib/string/replace", - "group": "utilities" - }, - { - "command": "resolve-parent-path", - "description": "Resolve a path by walking parent directories.", - "path": "@stdlib/fs/resolve-parent-path", - "group": "filesystem" - }, - { - "command": "reverse", - "description": "Reverse a string.", - "path": "@stdlib/string/reverse", - "group": "utilities" - }, - { - "command": "rpad", - "description": "Right pad a string.", - "path": "@stdlib/string/right-pad", - "group": "utilities" - }, - { - "command": "rtrim", - "description": "Right trim a string.", - "path": "@stdlib/string/right-trim", - "group": "utilities" - }, - { - "command": "safeintmax", - "description": "Maximum representable safe integer value.", - "path": "@stdlib/utils/safe-int-max", - "group": "utilities" - }, - { - "command": "safeintmin", - "description": "Minimum representable safe integer value.", - "path": "@stdlib/utils/safe-int-min", - "group": "utilities" - }, - { - "command": "seconds-in-month", - "description": "Calculate the number of seconds in a month.", - "path": "@stdlib/time/seconds-in-month", - "group": "time" - }, - { - "command": "seconds-in-year", - "description": "Calculate the number of seconds in a year.", - "path": "@stdlib/time/seconds-in-year", - "group": "time" - }, - { - "command": "sizeof", - "description": "Size (in bytes) of a numeric data type.", - "path": "@stdlib/utils/size-of", - "group": "utilities" - }, - { - "command": "sparkline", - "description": "Plot a sparkline.", - "path": "@stdlib/plot/sparklines/unicode", - "group": "plot" - }, - { - "command": "startcase", - "description": "Capitalize each word in a string.", - "path": "@stdlib/string/startcase", - "group": "utilities" - }, - { - "command": "starts-with", - "description": "Test if a string starts with another string.", - "path": "@stdlib/string/starts-with", - "group": "utilities" - }, - { - "command": "temp-http-server", - "description": "Create a temporary HTTP server.", - "path": "@stdlib/net/disposable-http-server", - "group": "utilities" - }, - { - "command": "timeit", - "description": "Time a JavaScript snippet.", - "path": "@stdlib/utils/timeit", - "group": "benchmarking" - }, - { - "command": "tmpdir", - "description": "Directory path for storing temporary files.", - "path": "@stdlib/os/tmpdir", - "group": "system" - }, - { - "command": "trim", - "description": "Trim a string.", - "path": "@stdlib/string/trim", - "group": "utilities" - }, - { - "command": "typemax", - "description": "Maximum value for a numeric data type.", - "path": "@stdlib/utils/type-max", - "group": "utilities" - }, - { - "command": "typemin", - "description": "Minimum value for a numeric data type.", - "path": "@stdlib/utils/type-min", - "group": "utilities" - }, - { - "command": "umask", - "description": "Process mask.", - "path": "@stdlib/process/umask", - "group": "system" - }, - { - "command": "uncapitalize", - "description": "Uncapitalize a string.", - "path": "@stdlib/string/uncapitalize", - "group": "utilities" - }, - { - "command": "unlink", - "description": "Remove a file.", - "path": "@stdlib/fs/unlink", - "group": "filesystem" - }, - { - "command": "uppercase", - "description": "Uppercase a string.", - "path": "@stdlib/string/uppercase", - "group": "utilities" - }, - { - "command": "write-file", - "description": "Write to file.", - "path": "@stdlib/fs/write-file", - "group": "filesystem" - }, - { - "command": "constant-stream", - "description": "Stream a constant value.", - "path": "@stdlib/streams/node/from-constant", - "group": "utilities" - }, - { - "command": "empty-stream", - "description": "Empty stream.", - "path": "@stdlib/streams/node/empty", - "group": "utilities" - } + { + "command": "help [command]", + "description": "Print a help message.", + "path": "", + "group": "general" + }, + { + "command": "arch", + "description": "Operating system CPU architecture.", + "path": "@stdlib/os/arch", + "group": "system" + }, + { + "command": "bench", + "description": "Run JavaScript benchmark files.", + "path": "@stdlib/bench", + "group": "benchmarking" + }, + { + "command": "bundle-pkg-list", + "description": "Bundle a list of stdlib packages.", + "path": "@stdlib/_tools/bundle/pkg-list", + "group": "tools" + }, + { + "command": "capitalize", + "description": "Capitalize the first character in a string.", + "path": "@stdlib/string/capitalize", + "group": "utilities" + }, + { + "command": "configdir", + "description": "Configuration directory path.", + "path": "@stdlib/os/configdir", + "group": "system" + }, + { + "command": "convert-path", + "description": "Convert between Windows and POSIX paths.", + "path": "@stdlib/utils/convert-path", + "group": "utilities" + }, + { + "command": "cwd", + "description": "Current working directory.", + "path": "@stdlib/process/cwd", + "group": "system" + }, + { + "command": "datasets", + "description": "Retrieve a dataset.", + "path": "@stdlib/datasets", + "group": "general" + }, + { + "command": "day-of-quarter", + "description": "Calculate day of quarter.", + "path": "@stdlib/time/day-of-quarter", + "group": "time" + }, + { + "command": "day-of-year", + "description": "Calculate day of year.", + "path": "@stdlib/time/day-of-year", + "group": "time" + }, + { + "command": "days-in-month", + "description": "Calculate the number of days in a month.", + "path": "@stdlib/time/days-in-month", + "group": "time" + }, + { + "command": "days-in-year", + "description": "Calculate the number of days in a year.", + "path": "@stdlib/time/days-in-year", + "group": "time" + }, + { + "command": "ends-with", + "description": "Test if a string ends with another string.", + "path": "@stdlib/string/ends-with", + "group": "utilities" + }, + { + "command": "exists", + "description": "Test if a file exists.", + "path": "@stdlib/fs/exists", + "group": "filesystem" + }, + { + "command": "from-code-point", + "description": "Create a string from code points.", + "path": "@stdlib/string/from-code-point", + "group": "utilities" + }, + { + "command": "has-arraybuffer-support", + "description": "Detect ArrayBuffer support.", + "path": "@stdlib/assert/has-arraybuffer-support", + "group": "assert" + }, + { + "command": "has-async-await-support", + "description": "Detect async/await support.", + "path": "@stdlib/assert/has-async-await-support", + "group": "assert" + }, + { + "command": "has-async-iterator-symbol-support", + "description": "Detect Symbol.asyncIterator support.", + "path": "@stdlib/assert/has-async-iterator-symbol-support", + "group": "assert" + }, + { + "command": "has-class-support", + "description": "Detect ES6 class support.", + "path": "@stdlib/assert/has-class-support", + "group": "assert" + }, + { + "command": "has-float32array-support", + "description": "Detect Float32Array support.", + "path": "@stdlib/assert/has-float32array-support", + "group": "assert" + }, + { + "command": "has-float64array-support", + "description": "Detect Float64Array support.", + "path": "@stdlib/assert/has-float64array-support", + "group": "assert" + }, + { + "command": "has-function-name-support", + "description": "Detect function name support.", + "path": "@stdlib/assert/has-function-name-support", + "group": "assert" + }, + { + "command": "has-generator-support", + "description": "Detect generator support.", + "path": "@stdlib/assert/has-generator-support", + "group": "assert" + }, + { + "command": "has-int16array-support", + "description": "Detect Int16Array support.", + "path": "@stdlib/assert/has-int16array-support", + "group": "assert" + }, + { + "command": "has-int32array-support", + "description": "Detect Int32Array support.", + "path": "@stdlib/assert/has-int32array-support", + "group": "assert" + }, + { + "command": "has-int8array-support", + "description": "Detect Int8Array support.", + "path": "@stdlib/assert/has-int8array-support", + "group": "assert" + }, + { + "command": "has-iterator-symbol-support", + "description": "Detect Symbol.iterator support.", + "path": "@stdlib/assert/has-iterator-symbol-support", + "group": "assert" + }, + { + "command": "has-map-support", + "description": "Detect Map support.", + "path": "@stdlib/assert/has-map-support", + "group": "assert" + }, + { + "command": "has-node-buffer-support", + "description": "Detect Node buffer support.", + "path": "@stdlib/assert/has-node-buffer-support", + "group": "assert" + }, + { + "command": "has-proxy-support", + "description": "Detect Proxy support.", + "path": "@stdlib/assert/has-proxy-support", + "group": "assert" + }, + { + "command": "has-set-support", + "description": "Detect Set support.", + "path": "@stdlib/assert/has-set-support", + "group": "assert" + }, + { + "command": "has-sharedarraybuffer-support", + "description": "Detect SharedArrayBuffer support.", + "path": "@stdlib/assert/has-sharedarraybuffer-support", + "group": "assert" + }, + { + "command": "has-symbol-support", + "description": "Detect Symbol support.", + "path": "@stdlib/assert/has-symbol-support", + "group": "assert" + }, + { + "command": "has-tostringtag-support", + "description": "Detect Symbol.toStringTag support.", + "path": "@stdlib/assert/has-tostringtag-support", + "group": "assert" + }, + { + "command": "has-uint16array-support", + "description": "Detect Uit16Array support.", + "path": "@stdlib/assert/has-uint16array-support", + "group": "assert" + }, + { + "command": "has-uint32array-support", + "description": "Detect Uit32Array support.", + "path": "@stdlib/assert/has-uint32array-support", + "group": "assert" + }, + { + "command": "has-uint8array-support", + "description": "Detect Uit8Array support.", + "path": "@stdlib/assert/has-uint8array-support", + "group": "assert" + }, + { + "command": "has-uint8clampedarray-support", + "description": "Detect Uit8ClampedArray support.", + "path": "@stdlib/assert/has-uint8clampedarray-support", + "group": "assert" + }, + { + "command": "has-wasm-support", + "description": "Detect WebAssembly support.", + "path": "@stdlib/assert/has-wasm-support", + "group": "assert" + }, + { + "command": "has-weakmap-support", + "description": "Detect WeakMap support.", + "path": "@stdlib/assert/has-weakmap-support", + "group": "assert" + }, + { + "command": "has-weakset-support", + "description": "Detect WeakSet support.", + "path": "@stdlib/assert/has-weakset-support", + "group": "assert" + }, + { + "command": "homedir", + "description": "Home directory path.", + "path": "@stdlib/os/homedir", + "group": "system" + }, + { + "command": "hours-in-month", + "description": "Calculate the number of hours in a month.", + "path": "@stdlib/time/hours-in-month", + "group": "time" + }, + { + "command": "hours-in-year", + "description": "Calculate the number of hours in a year.", + "path": "@stdlib/time/hours-in-year", + "group": "time" + }, + { + "command": "iso-weeks-in-year", + "description": "Calculate the number of ISO weeks in a year.", + "path": "@stdlib/time/iso-weeks-in-year", + "group": "time" + }, + { + "command": "is-absolute-path", + "description": "Assert an absolute path.", + "path": "@stdlib/assert/is-absolute-path", + "group": "assert" + }, + { + "command": "is-alphagram", + "description": "Assert if a value is an alphagram.", + "path": "@stdlib/assert/is-alphagram", + "group": "assert" + }, + { + "command": "is-alphanumeric", + "description": "Assert if a value is alphanumeric.", + "path": "@stdlib/assert/is-alphanumeric", + "group": "assert" + }, + { + "command": "is-anagram", + "description": "Assert if a value is an anagram.", + "path": "@stdlib/assert/is-anagram", + "group": "assert" + }, + { + "command": "is-ascii", + "description": "Assert if a value is ASCII.", + "path": "@stdlib/assert/is-ascii", + "group": "assert" + }, + { + "command": "is-binary-string", + "description": "Assert if a value is a binary string.", + "path": "@stdlib/assert/is-binary-string", + "group": "assert" + }, + { + "command": "is-capitalized", + "description": "Assert if a value is capitalized.", + "path": "@stdlib/assert/is-capitalized", + "group": "assert" + }, + { + "command": "is-digit-string", + "description": "Assert if a value is a digit string.", + "path": "@stdlib/assert/is-digit-string", + "group": "assert" + }, + { + "command": "is-email-address", + "description": "Assert if a value is an email address.", + "path": "@stdlib/assert/is-email-address", + "group": "assert" + }, + { + "command": "is-hex-string", + "description": "Assert if a value is a hexadecimal string.", + "path": "@stdlib/assert/is-hex-string", + "group": "assert" + }, + { + "command": "is-leap-year", + "description": "Assert if a leap year.", + "path": "@stdlib/assert/is-leap-year", + "group": "assert" + }, + { + "command": "is-little-endian", + "description": "Assert if little endian.", + "path": "@stdlib/assert/is-little-endian", + "group": "assert" + }, + { + "command": "is-lowercase", + "description": "Assert if a value is lowercase.", + "path": "@stdlib/assert/is-lowercase", + "group": "assert" + }, + { + "command": "is-regexp-string", + "description": "Assert if a value is a regexp string.", + "path": "@stdlib/assert/is-regexp-string", + "group": "assert" + }, + { + "command": "is-unc-path", + "description": "Assert a UNC path.", + "path": "@stdlib/assert/is-unc-path", + "group": "assert" + }, + { + "command": "is-uppercase", + "description": "Assert if a value is uppercase.", + "path": "@stdlib/assert/is-uppercase", + "group": "assert" + }, + { + "command": "is-uri", + "description": "Assert if a value is a URI.", + "path": "@stdlib/assert/is-uri", + "group": "assert" + }, + { + "command": "is-whitespace", + "description": "Assert if a value is only whitespace.", + "path": "@stdlib/assert/is-whitespace", + "group": "assert" + }, + { + "command": "js-eval", + "description": "Evaluate a JavaScript string.", + "path": "@stdlib/utils/eval", + "group": "utilities" + }, + { + "command": "library-manifest", + "description": "Load a manifest for compiling source files.", + "path": "@stdlib/utils/library-manifest", + "group": "meta" + }, + { + "command": "lpad", + "description": "Left pad a string.", + "path": "@stdlib/string/left-pad", + "group": "utilities" + }, + { + "command": "ltrim", + "description": "Left trim a string.", + "path": "@stdlib/string/left-trim", + "group": "utilities" + }, + { + "command": "lowercase", + "description": "Lowercase a string.", + "path": "@stdlib/string/lowercase", + "group": "utilities" + }, + { + "command": "ls", + "description": "List stdlib package names.", + "path": "@stdlib/_tools/pkgs/names", + "group": "meta" + }, + { + "command": "ls-tree", + "description": "Show stdlib package tree.", + "path": "@stdlib/_tools/pkgs/tree", + "group": "meta" + }, + { + "command": "minutes-in-month", + "description": "Calculate the number of minutes in a month.", + "path": "@stdlib/time/minutes-in-month", + "group": "time" + }, + { + "command": "minutes-in-year", + "description": "Calculate the number of minutes in a year.", + "path": "@stdlib/time/minutes-in-year", + "group": "time" + }, + { + "command": "node-version", + "description": "Node.js version.", + "path": "@stdlib/process/node-version", + "group": "meta" + }, + { + "command": "now", + "description": "Number of seconds since the epoch.", + "path": "@stdlib/time/now", + "group": "time" + }, + { + "command": "ns", + "description": "Print stdlib namespace.", + "path": "@stdlib/namespace", + "group": "meta" + }, + { + "command": "num-cpus", + "description": "Number of CPUs.", + "path": "@stdlib/os/num-cpus", + "group": "system" + }, + { + "command": "random-arcsine", + "description": "Arcsine distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/arcsine", + "group": "random" + }, + { + "command": "random-bernoulli", + "description": "Bernoulli distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/bernoulli", + "group": "random" + }, + { + "command": "random-beta", + "description": "Beta distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/beta", + "group": "random" + }, + { + "command": "random-betaprime", + "description": "Beta prime distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/betaprime", + "group": "random" + }, + { + "command": "random-box-muller", + "description": "Box-Muller pseudorandom numbers.", + "path": "@stdlib/random/streams/box-muller", + "group": "random" + }, + { + "command": "random-cauchy", + "description": "Cauchy distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/cauchy", + "group": "random" + }, + { + "command": "random-chi", + "description": "Chi distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/chi", + "group": "random" + }, + { + "command": "random-chisquare", + "description": "Chi-square distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/chisquare", + "group": "random" + }, + { + "command": "random-cosine", + "description": "Raised cosine distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/cosine", + "group": "random" + }, + { + "command": "random-discrete-uniform", + "description": "Uniformly distributed pseudorandom integers.", + "path": "@stdlib/random/streams/discrete-uniform", + "group": "random" + }, + { + "command": "random-erlang", + "description": "Erlang distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/erlang", + "group": "random" + }, + { + "command": "random-exponential", + "description": "Exponentially distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/exponential", + "group": "random" + }, + { + "command": "random-f", + "description": "F distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/f", + "group": "random" + }, + { + "command": "random-gamma", + "description": "Gamma distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/gamma", + "group": "random" + }, + { + "command": "random-geometric", + "description": "Geometric distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/geometric", + "group": "random" + }, + { + "command": "random-gumbel", + "description": "Gumbel distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/gumbel", + "group": "random" + }, + { + "command": "random-improved-ziggurat", + "description": "Improved Ziggurat pseudorandom numbers.", + "path": "@stdlib/random/streams/improved-ziggurat", + "group": "random" + }, + { + "command": "random-invgamma", + "description": "Inverse gamma distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/invgamma", + "group": "random" + }, + { + "command": "random-kumaraswamy", + "description": "Kumaraswamy distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/kumaraswamy", + "group": "random" + }, + { + "command": "random-laplace", + "description": "Laplace distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/laplace", + "group": "random" + }, + { + "command": "random-levy", + "description": "Lévy distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/levy", + "group": "random" + }, + { + "command": "random-logistic", + "description": "Logistic distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/logistic", + "group": "random" + }, + { + "command": "random-lognormal", + "description": "Lognormal distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/lognormal", + "group": "random" + }, + { + "command": "random-minstd", + "description": "Park and Miller LCG pseudorandom numbers.", + "path": "@stdlib/random/streams/minstd", + "group": "random" + }, + { + "command": "random-minstd-shuffle", + "description": "Shuffled LCG pseudorandom numbers.", + "path": "@stdlib/random/streams/minstd-shuffle", + "group": "random" + }, + { + "command": "random-mt19937", + "description": "32-bit Mersenne Twister pseudorandom numbers.", + "path": "@stdlib/random/streams/mt19937", + "group": "random" + }, + { + "command": "random-normal", + "description": "Normally distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/normal", + "group": "random" + }, + { + "command": "random-pareto-type1", + "description": "Pareto (type 1) distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/pareto-type1", + "group": "random" + }, + { + "command": "random-poisson", + "description": "Poisson distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/poisson", + "group": "random" + }, + { + "command": "random-randi", + "description": "Pseudorandom numbers having integer values.", + "path": "@stdlib/random/streams/randi", + "group": "random" + }, + { + "command": "random-randn", + "description": "Normally distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/randn", + "group": "random" + }, + { + "command": "random-randu", + "description": "Pseudorandom numbers between 0 and 1.", + "path": "@stdlib/random/streams/randu", + "group": "random" + }, + { + "command": "random-Rayleigh", + "description": "Rayleigh distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/rayleigh", + "group": "random" + }, + { + "command": "random-t", + "description": "Student's t distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/t", + "group": "random" + }, + { + "command": "random-uniform", + "description": "Uniformly distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/uniform", + "group": "random" + }, + { + "command": "random-weibull", + "description": "Weibull distributed pseudorandom numbers.", + "path": "@stdlib/random/streams/weibull", + "group": "random" + }, + { + "command": "open-url", + "description": "Open a URL.", + "path": "@stdlib/utils/open-url", + "group": "utilities" + }, + { + "command": "padstr", + "description": "Pad a string.", + "path": "@stdlib/string/pad", + "group": "utilities" + }, + { + "command": "parallel", + "description": "Execute scripts in parallel.", + "path": "@stdlib/utils/parallel", + "group": "utilities" + }, + { + "command": "percent-encode", + "description": "Percent-encode a UTF-16 encoded string.", + "path": "@stdlib/string/percent-encode", + "group": "utilities" + }, + { + "command": "platform", + "description": "Platform.", + "path": "@stdlib/os/platform", + "group": "system" + }, + { + "command": "quarter-of-year", + "description": "Calculate the quarter of a year.", + "path": "@stdlib/time/quarter-of-year", + "group": "time" + }, + { + "command": "read-dir", + "description": "Read all files in a directory.", + "path": "@stdlib/fs/read-dir", + "group": "filesystem" + }, + { + "command": "read-file", + "description": "Read a file.", + "path": "@stdlib/fs/read-file", + "group": "filesystem" + }, + { + "command": "read-file-list", + "description": "Read a list of files.", + "path": "@stdlib/fs/read-file-list", + "group": "filesystem" + }, + { + "command": "realmax", + "description": "Maximum representable finite value.", + "path": "@stdlib/utils/real-max", + "group": "utilities" + }, + { + "command": "realmin", + "description": "Minimum representable finite value.", + "path": "@stdlib/utils/real-min", + "group": "utilities" + }, + { + "command": "remove-first", + "description": "Remove the first character in a string.", + "path": "@stdlib/string/remove-first", + "group": "utilities" + }, + { + "command": "remove-last", + "description": "Remove the last character in a string.", + "path": "@stdlib/string/remove-last", + "group": "utilities" + }, + { + "command": "remove-punctuation", + "description": "Remove punctuation characters from a string.", + "path": "@stdlib/string/remove-punctuation", + "group": "utilities" + }, + { + "command": "remove-utf8-bom", + "description": "Remove a UTF-8 byte order mark (BOM).", + "path": "@stdlib/string/remove-first", + "group": "utilities" + }, + { + "command": "remove-words", + "description": "Remove a list of words from a string.", + "path": "@stdlib/string/remove-words", + "group": "utilities" + }, + { + "command": "rename", + "description": "Rename a file.", + "path": "@stdlib/fs/rename", + "group": "filesystem" + }, + { + "command": "repstr", + "description": "Repeat a string.", + "path": "@stdlib/string/repeat", + "group": "utilities" + }, + { + "command": "repl", + "description": "Start a REPL.", + "path": "@stdlib/repl", + "group": "general" + }, + { + "command": "repl-presentation", + "description": "Start a REPL presentation.", + "path": "@stdlib/repl/presentation", + "group": "general" + }, + { + "command": "replace", + "description": "Replace search occurrences in a string.", + "path": "@stdlib/string/replace", + "group": "utilities" + }, + { + "command": "resolve-parent-path", + "description": "Resolve a path by walking parent directories.", + "path": "@stdlib/fs/resolve-parent-path", + "group": "filesystem" + }, + { + "command": "reverse", + "description": "Reverse a string.", + "path": "@stdlib/string/reverse", + "group": "utilities" + }, + { + "command": "rpad", + "description": "Right pad a string.", + "path": "@stdlib/string/right-pad", + "group": "utilities" + }, + { + "command": "rtrim", + "description": "Right trim a string.", + "path": "@stdlib/string/right-trim", + "group": "utilities" + }, + { + "command": "safeintmax", + "description": "Maximum representable safe integer value.", + "path": "@stdlib/utils/safe-int-max", + "group": "utilities" + }, + { + "command": "safeintmin", + "description": "Minimum representable safe integer value.", + "path": "@stdlib/utils/safe-int-min", + "group": "utilities" + }, + { + "command": "seconds-in-month", + "description": "Calculate the number of seconds in a month.", + "path": "@stdlib/time/seconds-in-month", + "group": "time" + }, + { + "command": "seconds-in-year", + "description": "Calculate the number of seconds in a year.", + "path": "@stdlib/time/seconds-in-year", + "group": "time" + }, + { + "command": "sizeof", + "description": "Size (in bytes) of a numeric data type.", + "path": "@stdlib/utils/size-of", + "group": "utilities" + }, + { + "command": "sparkline", + "description": "Plot a sparkline.", + "path": "@stdlib/plot/sparklines/unicode", + "group": "plot" + }, + { + "command": "startcase", + "description": "Capitalize each word in a string.", + "path": "@stdlib/string/startcase", + "group": "utilities" + }, + { + "command": "starts-with", + "description": "Test if a string starts with another string.", + "path": "@stdlib/string/starts-with", + "group": "utilities" + }, + { + "command": "temp-http-server", + "description": "Create a temporary HTTP server.", + "path": "@stdlib/net/disposable-http-server", + "group": "utilities" + }, + { + "command": "timeit", + "description": "Time a JavaScript snippet.", + "path": "@stdlib/utils/timeit", + "group": "benchmarking" + }, + { + "command": "tmpdir", + "description": "Directory path for storing temporary files.", + "path": "@stdlib/os/tmpdir", + "group": "system" + }, + { + "command": "trim", + "description": "Trim a string.", + "path": "@stdlib/string/trim", + "group": "utilities" + }, + { + "command": "typemax", + "description": "Maximum value for a numeric data type.", + "path": "@stdlib/utils/type-max", + "group": "utilities" + }, + { + "command": "typemin", + "description": "Minimum value for a numeric data type.", + "path": "@stdlib/utils/type-min", + "group": "utilities" + }, + { + "command": "umask", + "description": "Process mask.", + "path": "@stdlib/process/umask", + "group": "system" + }, + { + "command": "uncapitalize", + "description": "Uncapitalize a string.", + "path": "@stdlib/string/uncapitalize", + "group": "utilities" + }, + { + "command": "unlink", + "description": "Remove a file.", + "path": "@stdlib/fs/unlink", + "group": "filesystem" + }, + { + "command": "uppercase", + "description": "Uppercase a string.", + "path": "@stdlib/string/uppercase", + "group": "utilities" + }, + { + "command": "write-file", + "description": "Write to file.", + "path": "@stdlib/fs/write-file", + "group": "filesystem" + }, + { + "command": "constant-stream", + "description": "Stream a constant value.", + "path": "@stdlib/streams/node/from-constant", + "group": "utilities" + }, + { + "command": "empty-stream", + "description": "Empty stream.", + "path": "@stdlib/streams/node/empty", + "group": "utilities" + } ] diff --git a/deps/test/boost/test_install.cpp b/deps/test/boost/test_install.cpp index 1f2532baed50..cc0142d92fd3 100644 --- a/deps/test/boost/test_install.cpp +++ b/deps/test/boost/test_install.cpp @@ -22,8 +22,8 @@ #include int main() { - using namespace boost::lambda; - typedef std::istream_iterator in; + using namespace boost::lambda; + typedef std::istream_iterator in; - std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << " " ); + std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << " " ); } diff --git a/docs/assets/web/browserconfig.xml b/docs/assets/web/browserconfig.xml index b3930d0f0471..da4ead20419f 100644 --- a/docs/assets/web/browserconfig.xml +++ b/docs/assets/web/browserconfig.xml @@ -1,9 +1,9 @@ - - - - #da532c - - + + + + #da532c + + diff --git a/docs/branching.md b/docs/branching.md index 4a6ceb7f69ee..e4a05fdf8e8b 100644 --- a/docs/branching.md +++ b/docs/branching.md @@ -105,7 +105,7 @@ This project follows the branching model articulated in ["A successful Git branc - Before merging a hotfix branch into the `master` branch, the changes **must** be peer reviewed and pass continuous integration tests. -- Once merged into `master`, if a release branch currently exists, submit a pull request against the `release` branch. Otherwise, submit a pull request against the `develop` branch. By merging a hotfix into a release branch, the hotfix changes should be propagated to the `develop` branch upon merging the release branch into the `develop` branch. +- Once merged into `master`, if a release branch currently exists, submit a pull request against the `release` branch. Otherwise, submit a pull request against the `develop` branch. By merging a hotfix into a release branch, the hotfix changes should be propagated to the `develop` branch upon merging the release branch into the `develop` branch. * * * diff --git a/docs/development.md b/docs/development.md index 6e9985af072d..af542f232b52 100644 --- a/docs/development.md +++ b/docs/development.md @@ -254,7 +254,7 @@ workshops workshops ```bash $ make TESTS_FILTER=.*//.* test ``` - + with @@ -262,7 +262,7 @@ workshops workshops ```bash $ make TESTS_FILTER=".*//.*" test ``` - + ## Editors diff --git a/docs/doctest.md b/docs/doctest.md index 18f59393e79c..b67942e541c9 100644 --- a/docs/doctest.md +++ b/docs/doctest.md @@ -48,7 +48,7 @@ The following guide sets forth doctest conventions for documenting expected beha A doctest annotation is a syntactically valid language comment consisting of a **marker** and an **expected value**. -> **Note**: most of the following examples will be written in JavaScript which uses C-style comment syntax. While invariably biased toward JavaScript, the doctest annotation convention endeavors to be language agnostic and not limited to any particular comment style. +> **Note**: most of the following examples will be written in JavaScript which uses C-style comment syntax. While invariably biased toward JavaScript, the doctest annotation convention endeavors to be language agnostic and not limited to any particular comment style. Doctest annotations begin with one of three keyword markers (with limited exceptions documented below): @@ -129,7 +129,7 @@ swap( x, 0, 1 ); // x => [ 2, 1 ] ``` -indicates that the two-element array to which `x` refers has been mutated after evaluation of the preceding expressions. In this case, as `swap()` returns a `boolean`, the `returns` keyword would not allow us to assert the more salient behavior of array mutation. By using the `{var} =>` convention, we can do so. +indicates that the two-element array to which `x` refers has been mutated after evaluation of the preceding expressions. In this case, as `swap()` returns a `boolean`, the `returns` keyword would not allow us to assert the more salient behavior of array mutation. By using the `{var} =>` convention, we can do so. The `e.g.,` and `{var} =>` prefixes can be used in combination. For example, @@ -231,7 +231,7 @@ var o = foo(); 'b': [ 4, 5, 6 ], 'c': [ 7, 8, 9 ], 'd': { - 'beep': 'boop' + 'beep': 'boop' } } */ @@ -579,7 +579,7 @@ var mat = foo(); /* returns mat[':'] = [ 1.14, -3.14, - 0.00, 0.50 ] + 0.00, 0.50 ] */ ``` @@ -595,14 +595,14 @@ Less commonly, one may want to assert a sub-matrix. For example, var mat = foo(); /* returns - mat['1:2,2:3'] = [ 1.14, -3.14, - 0.00, 0.50 ] + mat['1:2,2:3'] = [ 1.14, -3.14, + 0.00, 0.50 ] */ ``` indicates that `foo()` returns an `NxM` matrix containing a `2x2` sub-matrix beginning with the first row and second column whose contents, when expressed as a linear array, equal `1.14`, `-3.14`, `0.00`, and `0.50`. -Additionally, matrices can include wildcards. For example, +Additionally, matrices can include wildcards. For example, @@ -613,8 +613,8 @@ var mat = foo(); /* returns mat[':'] = [ 1.14, ..., -3.14, - 0.00, ..., 0.50, - ..., ..., ... ] + 0.00, ..., 0.50, + ..., ..., ... ] */ ``` diff --git a/docs/editors/sublime-text/completions/stdlib-awk.sublime-completions b/docs/editors/sublime-text/completions/stdlib-awk.sublime-completions index 646926cc9de0..b52ed7e658e4 100644 --- a/docs/editors/sublime-text/completions/stdlib-awk.sublime-completions +++ b/docs/editors/sublime-text/completions/stdlib-awk.sublime-completions @@ -6,4 +6,4 @@ "contents": "#!/usr/bin/env awk -f\n#\n# @license Apache-2.0\n#\n# Copyright (c) 2023 The Stdlib Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n" } ] -} \ No newline at end of file +} diff --git a/docs/editors/sublime-text/completions/stdlib-bash.sublime-completions b/docs/editors/sublime-text/completions/stdlib-bash.sublime-completions index 3adb008345e7..d0aa15c1a99c 100644 --- a/docs/editors/sublime-text/completions/stdlib-bash.sublime-completions +++ b/docs/editors/sublime-text/completions/stdlib-bash.sublime-completions @@ -6,4 +6,4 @@ "contents": "#!/usr/bin/env bash\n#\n# @license Apache-2.0\n#\n# Copyright (c) 2023 The Stdlib Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n" } ] -} \ No newline at end of file +} diff --git a/docs/editors/sublime-text/completions/stdlib-js.sublime-completions b/docs/editors/sublime-text/completions/stdlib-js.sublime-completions index 96a8b15fb178..76905337f1e7 100644 --- a/docs/editors/sublime-text/completions/stdlib-js.sublime-completions +++ b/docs/editors/sublime-text/completions/stdlib-js.sublime-completions @@ -10,4 +10,4 @@ "contents": "#!/usr/bin/env node\n\n/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n" } ] -} \ No newline at end of file +} diff --git a/docs/editors/sublime-text/completions/stdlib-julia.sublime-completions b/docs/editors/sublime-text/completions/stdlib-julia.sublime-completions index 02ed7ad8182c..9e82181d81ff 100644 --- a/docs/editors/sublime-text/completions/stdlib-julia.sublime-completions +++ b/docs/editors/sublime-text/completions/stdlib-julia.sublime-completions @@ -6,4 +6,4 @@ "contents": "#!/usr/bin/env julia\n#\n# @license Apache-2.0\n#\n# Copyright (c) 2023 The Stdlib Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n" } ] -} \ No newline at end of file +} diff --git a/docs/editors/sublime-text/completions/stdlib-python.sublime-completions b/docs/editors/sublime-text/completions/stdlib-python.sublime-completions index ac3d402861b2..17aa9f25e134 100644 --- a/docs/editors/sublime-text/completions/stdlib-python.sublime-completions +++ b/docs/editors/sublime-text/completions/stdlib-python.sublime-completions @@ -6,4 +6,4 @@ "contents": "#!/usr/bin/env python\n#\n# @license Apache-2.0\n#\n# Copyright (c) 2023 The Stdlib Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n" } ] -} \ No newline at end of file +} diff --git a/docs/editors/sublime-text/completions/stdlib-r.sublime-completions b/docs/editors/sublime-text/completions/stdlib-r.sublime-completions index 556f0f4c3f1d..a4cddf4f348c 100644 --- a/docs/editors/sublime-text/completions/stdlib-r.sublime-completions +++ b/docs/editors/sublime-text/completions/stdlib-r.sublime-completions @@ -6,4 +6,4 @@ "contents": "#!/usr/bin/env Rscript\n#\n# @license Apache-2.0\n#\n# Copyright (c) 2023 The Stdlib Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n" } ] -} \ No newline at end of file +} diff --git a/docs/editors/vscode/README.md b/docs/editors/vscode/README.md index 2be31a9135da..9a4d2ef8d6b2 100644 --- a/docs/editors/vscode/README.md +++ b/docs/editors/vscode/README.md @@ -28,7 +28,7 @@ limitations under the License. Pre-built binaries are available for download on the Visual Studio Code [homepage][vscode]. -To use [Visual Studio Code][vscode] as a command-line utility, users on MacOS have to run a command to add the [Visual Studio Code][vscode] executable to the `PATH` environment variable (see the official [documentation][vscode-macos-setup]). +To use [Visual Studio Code][vscode] as a command-line utility, users on MacOS have to run a command to add the [Visual Studio Code][vscode] executable to the `PATH` environment variable (see the official [documentation][vscode-macos-setup]). To test the command-line utility, @@ -113,7 +113,7 @@ $ code . { "text": "TODO:", "color": "darkred", - "backgroundColor": "rgba(0,0,0,.2)", + "backgroundColor": "rgba(0,0,0,.2)", "isWholeLine": true }, { diff --git a/docs/gfortran.md b/docs/gfortran.md index 87588e0dfd80..fc2d18f48f60 100644 --- a/docs/gfortran.md +++ b/docs/gfortran.md @@ -114,7 +114,7 @@ double precision function add( x, y ) end function add ``` -While `add` may be used in conjunction with other Fortran files, we cannot use `add` directly from C because Fortran expects arguments to be passed by reference rather than by value. Furthermore, while not applicable here, Fortran functions can only return scalar values, not arrays. Thus, the general best practice is to wrap `add` as a subroutine (equivalent of a C function returning `(void)`), where we can pass a pointer for storing the output return value. +While `add` may be used in conjunction with other Fortran files, we cannot use `add` directly from C because Fortran expects arguments to be passed by reference rather than by value. Furthermore, while not applicable here, Fortran functions can only return scalar values, not arrays. Thus, the general best practice is to wrap `add` as a subroutine (equivalent of a C function returning `(void)`), where we can pass a pointer for storing the output return value. ```fortran !> @@ -125,7 +125,7 @@ subroutine addsub( x, y, sum ) ! .. ! External functions: interface - double precision function add( x, y ) + double precision function add( x, y ) double precision :: x, y end function add end interface @@ -170,9 +170,9 @@ where we prevent name mangling using `extern "C"`. Now that our Fortran code is #include "add_fortran.h" double c_add( const double x, const double y ) { - double sum; - addsub( &x, &y, &sum ); - return sum; + double sum; + addsub( &x, &y, &sum ); + return sum; } ``` @@ -208,9 +208,9 @@ These five files together comprise a library which may be used by other librarie #include "add.h" int main( void ) { - double sum = add( 1, 2 ); - printf( "Result: %.2f\n", sum ); - return 0; + double sum = add( 1, 2 ); + printf( "Result: %.2f\n", sum ); + return 0; } ``` diff --git a/docs/misc/javascript_quirks.md b/docs/misc/javascript_quirks.md index 85eddd4572db..3ffff3a26895 100644 --- a/docs/misc/javascript_quirks.md +++ b/docs/misc/javascript_quirks.md @@ -26,4 +26,4 @@ [java-math-round]: https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#round%28double%29 - + diff --git a/docs/references/README.md b/docs/references/README.md index 059339751c0a..a9227f13fe61 100644 --- a/docs/references/README.md +++ b/docs/references/README.md @@ -39,7 +39,7 @@ The database is a [BibTeX][bibtex] database file, where the file format is a pla } ``` -corresponds to Bay's and Durham's 1976 article "Improving a Poor Random Number Generator" appearing in the journal _ACM Transactions on Mathematical Software_. +corresponds to Bay's and Durham's 1976 article "Improving a Poor Random Number Generator" appearing in the journal _ACM Transactions on Mathematical Software_. diff --git a/docs/references/bib.bib b/docs/references/bib.bib index 46761f21b26b..00e01902a392 100644 --- a/docs/references/bib.bib +++ b/docs/references/bib.bib @@ -1352,7 +1352,7 @@ @inproceedings{hu:2004a keywords = {reviews, sentiment classification, summarization, text mining}, location = {Seattle, WA, USA}, numpages = {10}, - pages = {168--177}, + pages = {168--177}, publisher = {ACM}, series = {KDD '04}, title = {{Mining and Summarizing Customer Reviews}}, @@ -1371,7 +1371,7 @@ @inproceedings{liu:2005a keywords = {information extraction, opinion analysis, sentiment analysis, visualization}, location = {Chiba, Japan}, numpages = {10}, - pages = {342--351}, + pages = {342--351}, publisher = {ACM}, series = {WWW '05}, title = {{Opinion Observer: Analyzing and Comparing Opinions on the Web}}, @@ -1639,20 +1639,20 @@ @article{dekker:1971a @inproceedings{caliskan-islam:2015a, abstract = {Source code authorship attribution is a significant privacy threat to anonymous code contributors. However, it may also enable attribution of successful attacks from code left behind on an infected system, or aid in resolving copyright, copyleft, and plagiarism issues in the programming fields. In this work, we investigate machine learning methods to de-anonymize source code authors of C/C++ using coding style. Our Code Stylometry Feature Set is a novel representation of coding style found in source code that reflects coding style from properties derived from abstract syntax trees. Our random forest and abstract syntax tree-based approach attributes more authors (1,600 and 250) with significantly higher accuracy (94% and 98%) on a larger data set (Google Code Jam) than has been previously achieved. Furthermore, these novel features are robust, difficult to obfuscate, and can be used in other programming languages, such as Python. We also find that (i) the code resulting from difficult programming tasks is easier to attribute than easier tasks and (ii) skilled programmers (who can complete the more difficult tasks) are easier to attribute than less skilled programmers.}, - acmid = {2831160}, - address = {Berkeley, CA, USA}, + acmid = {2831160}, + address = {Berkeley, CA, USA}, author = {Aylin Caliskan-Islam and Richard Harang and Andrew Liu and Arvind Narayanan and Clare Voss and Fabian Yamaguchi and Rachel Greenstadt}, booktitle = {Proceedings of the 24th USENIX Conference on Security Symposium}, isbn = {978-1-931971-232}, - keywords = {code style, stylometry, static analysis, javascript, automation}, + keywords = {code style, stylometry, static analysis, javascript, automation}, location = {Washington, D.C.}, - numpages = {16}, - pages = {255--270}, - publisher = {USENIX Association}, + numpages = {16}, + pages = {255--270}, + publisher = {USENIX Association}, series = {SEC'15}, - title = {{De-anonymizing Programmers via Code Stylometry}}, + title = {{De-anonymizing Programmers via Code Stylometry}}, url = {http://dl.acm.org/citation.cfm?id=2831143.2831160}, - year = {2015}, + year = {2015}, } @inproceedings{wittern:2016a, @@ -1726,8 +1726,8 @@ @mastersthesis{ourada:1991a @article{kemerer:1987a, abstract = {Practitioners have expressed concern over their inability to accurately estimate costs associated with software development. This concern has become even more pressing as costs associated with development continue to increase. As a result, considerable research attention is now directed at gaining a better understanding of the software-development process as well as constructing and evaluating software cost estimating tools. This paper evaluates four of the most popular algorithmic models used to estimate software costs (SLIM, COCOMO, Function Points, and ESTIMACS). Data on 15 large completed business data-processing projects were collected and used to test the accuracy of the models' ex post effort estimation. One important result was that Albrecht's Function Points effort estimation model was validated by the independent data provided in this study [3]. The models not developed in business data-processing environments showed significant need for calibration. As models of the software-development process, all of the models tested failed to sufficiently reflect the underlying factors affecting productivity. Further research will be required to develop understanding in this area.}, acmid = {22906}, - address = {New York, NY, USA}, - author = {Chris F. Kemerer}, + address = {New York, NY, USA}, + author = {Chris F. Kemerer}, doi = {10.1145/22899.22906}, issn = {0001-0782}, issue_date = {May 1987}, @@ -1737,7 +1737,7 @@ @article{kemerer:1987a number = {5}, numpages = {14}, pages = {416--429}, - publisher = {ACM}, + publisher = {ACM}, title = {{An Empirical Validation of Software Cost Estimation Models}}, url = {http://doi.acm.org/10.1145/22899.22906}, volume = {30}, diff --git a/docs/repl_text.md b/docs/repl_text.md index e7bac2d0300c..a51833977397 100644 --- a/docs/repl_text.md +++ b/docs/repl_text.md @@ -535,7 +535,7 @@ A few notes: A short description. ... - + Examples -------- > var out = {{alias}}( 'beep' ) @@ -555,7 +555,7 @@ A few notes: A short description. ... - + Examples -------- > var out = {{alias}}( {{alias:@stdlib/constants/math/float64-pi}} ) diff --git a/docs/style-guides/git/README.md b/docs/style-guides/git/README.md index dfca3e46eac0..b258eb5f75ce 100644 --- a/docs/style-guides/git/README.md +++ b/docs/style-guides/git/README.md @@ -72,7 +72,7 @@ The **type** and **short summary** fields are **mandatory**, and the **scope** f The **type** field labels a commit and indicates the category of change introduced by a commit. The project uses the following commit types: -- **bench**: benchmark-only changes, such as adding missing benchmarks or correcting existing benchmarks. This type has lower precedence than other types, and, thus, benchmarks accompanying other types of changes can be categorized according to those other types. +- **bench**: benchmark-only changes, such as adding missing benchmarks or correcting existing benchmarks. This type has lower precedence than other types, and, thus, benchmarks accompanying other types of changes can be categorized according to those other types. - **build**: anything to do with building and releasing the project, including changes to automation and continuous integration configuration files and scripts (e.g., GitHub actions, CircleCI, Azure, etc). @@ -106,7 +106,7 @@ The **type** field labels a commit and indicates the category of change introduc - **style**: a change which improves code style (e.g., whitespace, formatting, semicolons, etc) and does not affect the meaning of code. -- **test**: test-only changes, such as adding missing tests or correcting existing tests. This type has lower precedence than other types, and, thus, tests accompanying other types of changes can be categorized according to those other types. +- **test**: test-only changes, such as adding missing tests or correcting existing tests. This type has lower precedence than other types, and, thus, tests accompanying other types of changes can be categorized according to those other types. - **temp**: temporary, experimental, or exploratory changes that are not intended to be permanent. Occasionally, one may want to push changes to GitHub that are intended to be short-lived, such as when debugging continuous integration or ad-hoc debugging on live systems. diff --git a/docs/style-guides/javascript/README.md b/docs/style-guides/javascript/README.md index b69f1121b6a4..d34fb771f13f 100644 --- a/docs/style-guides/javascript/README.md +++ b/docs/style-guides/javascript/README.md @@ -35,7 +35,7 @@ ## Introduction -Always abide by the **Law of Code Style Consistency**, or, in other words, _when in Rome, do as the Romans do_. +Always abide by the **Law of Code Style Consistency**, or, in other words, _when in Rome, do as the Romans do_. While the code base to which you want to contribute may be a horrific mess in terms of aesthetic appearance and style, style consistency takes precedence over personal preference and canon. The more consistent a code base is in terms of style, the more readers of the code can focus on what the code does rather than deciphering changes in style. @@ -971,7 +971,7 @@ Code review. ##### Reason -When copying a small `array`, using `Array#slice()` incurs a function overhead which outweighs benefits. Thus, a `for` loop is more efficient. For larger `arrays`, function cost is comparable to or less than loop cost in addition to the runtime engine being able to optimize for copying large chunks of memory. +When copying a small `array`, using `Array#slice()` incurs a function overhead which outweighs benefits. Thus, a `for` loop is more efficient. For larger `arrays`, function cost is comparable to or less than loop cost in addition to the runtime engine being able to optimize for copying large chunks of memory. ##### Small Array Example @@ -3402,7 +3402,7 @@ Testing, debugging, maintainability, composition, focused interfaces, and interc ##### Enforcement - Look for parts of an implementation which can be extracted into reusable components. -- Code review +- Code review diff --git a/etc/jsdoc/.jsdoc.json b/etc/jsdoc/.jsdoc.json index a92d2b9579cc..60c48861197e 100644 --- a/etc/jsdoc/.jsdoc.json +++ b/etc/jsdoc/.jsdoc.json @@ -1,16 +1,16 @@ { - "opts": { - "encoding": "utf8", - "destination": "./build/", - "package": "", - "readme": "" - }, - "plugins": [ - "plugins/markdown" - ], - "templates": { - "default": { - "useLongnameInNav": false - } - } + "opts": { + "encoding": "utf8", + "destination": "./build/", + "package": "", + "readme": "" + }, + "plugins": [ + "plugins/markdown" + ], + "templates": { + "default": { + "useLongnameInNav": false + } + } } diff --git a/tools/dev.md b/tools/dev.md index 10bd4f726a00..19f24af8fea8 100644 --- a/tools/dev.md +++ b/tools/dev.md @@ -8,7 +8,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -42,7 +42,7 @@ To package as a command-line tool, add the following to the platform-specific co ```bash tab() { - echo -n -e "\033]0;$*\007" + echo -n -e "\033]0;$*\007" } ``` @@ -95,7 +95,7 @@ where `-F` indicates to search for a fixed string. To search using a regular exp #### Exclusion -To exclude paths when using `find`, use membership inversion +To exclude paths when using `find`, use membership inversion ```bash $ find -type f -name foo.txt -regextype posix-extended -regex '.*/foo/([^b]+|(b([^a]|$)|ba([^r]|$)))+/.*' diff --git a/tools/docs/jsdoc/templates/html/publish.js b/tools/docs/jsdoc/templates/html/publish.js index 397718f3ca08..23672c928922 100644 --- a/tools/docs/jsdoc/templates/html/publish.js +++ b/tools/docs/jsdoc/templates/html/publish.js @@ -1,5 +1,6 @@ 'use strict'; +var util = require('util'); var doop = require('jsdoc/util/doop'); var env = require('jsdoc/env'); var fs = require('jsdoc/fs'); @@ -8,647 +9,161 @@ var logger = require('jsdoc/util/logger'); var path = require('jsdoc/path'); var taffy = require('taffydb').taffy; var template = require('jsdoc/template'); -var util = require('util'); - -var htmlsafe = helper.htmlsafe; -var linkto = helper.linkto; -var resolveAuthorLinks = helper.resolveAuthorLinks; -var scopeToPunc = helper.scopeToPunc; -var hasOwnProp = Object.prototype.hasOwnProperty; - -var data; -var view; - -var outdir = path.normalize(env.opts.destination); - -function find(spec) { - return helper.find(data, spec); -} - -function tutoriallink(tutorial) { - return helper.toTutorial(tutorial, null, { tag: 'em', classname: 'disabled', prefix: 'Tutorial: ' }); -} - -function getAncestorLinks(doclet) { - return helper.getAncestorLinks(data, doclet); -} - -function hashToLink(doclet, hash) { - if ( !/^(#.+)/.test(hash) ) { return hash; } - - var url = helper.createLink(doclet); - - url = url.replace(/(#.+|$)/, hash); - return '' + hash + ''; -} - -function needsSignature(doclet) { - var needsSig = false; - - // function and class definitions always get a signature - if (doclet.kind === 'function' || doclet.kind === 'class') { - needsSig = true; - } - // typedefs that contain functions get a signature, too - else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names && - doclet.type.names.length) { - for (var i = 0, l = doclet.type.names.length; i < l; i++) { - if (doclet.type.names[i].toLowerCase() === 'function') { - needsSig = true; - break; - } - } - } - - return needsSig; -} - -function getSignatureAttributes(item) { - var attributes = []; - - if (item.optional) { - attributes.push('opt'); - } - - if (item.nullable === true) { - attributes.push('nullable'); - } - else if (item.nullable === false) { - attributes.push('non-null'); - } - - return attributes; -} - -function updateItemName(item) { - var attributes = getSignatureAttributes(item); - var itemName = item.name || ''; - - if (item.variable) { - itemName = '…' + itemName; - } - - if (attributes && attributes.length) { - itemName = util.format( '%s%s', itemName, - attributes.join(', ') ); - } - - return itemName; -} - -function addParamAttributes(params) { - return params.filter(function(param) { - return param.name && param.name.indexOf('.') === -1; - }).map(updateItemName); -} - -function buildItemTypeStrings(item) { - var types = []; - - if (item && item.type && item.type.names) { - item.type.names.forEach(function(name) { - types.push( linkto(name, htmlsafe(name)) ); - }); - } - - return types; -} - -function buildAttribsString(attribs) { - var attribsString = ''; - - if (attribs && attribs.length) { - attribsString = htmlsafe( util.format('(%s) ', attribs.join(', ')) ); - } - - return attribsString; -} - -function addNonParamAttributes(items) { - var types = []; - - items.forEach(function(item) { - types = types.concat( buildItemTypeStrings(item) ); - }); - - return types; -} - -function addSignatureParams(f) { - var params = f.params ? addParamAttributes(f.params) : []; - - f.signature = util.format( '%s(%s)', (f.signature || ''), params.join(', ') ); -} - -function addSignatureReturns(f) { - var attribs = []; - var attribsString = ''; - var returnTypes = []; - var returnTypesString = ''; - - // jam all the return-type attributes into an array. this could create odd results (for example, - // if there are both nullable and non-nullable return types), but let's assume that most people - // who use multiple @return tags aren't using Closure Compiler type annotations, and vice-versa. - if (f.returns) { - f.returns.forEach(function(item) { - helper.getAttribs(item).forEach(function(attrib) { - if (attribs.indexOf(attrib) === -1) { - attribs.push(attrib); - } - }); - }); - - attribsString = buildAttribsString(attribs); - } - - if (f.returns) { - returnTypes = addNonParamAttributes(f.returns); - } - if (returnTypes.length) { - returnTypesString = util.format( ' → %s{%s}', attribsString, returnTypes.join('|') ); - } - - f.signature = '' + (f.signature || '') + '' + - '' + returnTypesString + ''; -} - -function addSignatureTypes(f) { - var types = f.type ? buildItemTypeStrings(f) : []; - - f.signature = (f.signature || '') + '' + - (types.length ? ' :' + types.join('|') : '') + ''; -} - -function addAttribs(f) { - var attribs = helper.getAttribs(f); - var attribsString = buildAttribsString(attribs); - - f.attribs = util.format('%s', attribsString); -} - -function shortenPaths(files, commonPrefix) { - Object.keys(files).forEach(function(file) { - files[file].shortened = files[file].resolved.replace(commonPrefix, '') - // always use forward slashes - .replace(/\\/g, '/'); - }); - - return files; -} - -function getPathFromDoclet(doclet) { - if (!doclet.meta) { - return null; - } - - return doclet.meta.path && doclet.meta.path !== 'null' ? - path.join(doclet.meta.path, doclet.meta.filename) : - doclet.meta.filename; -} - -function generate(title, docs, filename, resolveLinks) { - resolveLinks = resolveLinks === false ? false : true; - - var docData = { - env: env, - title: title, - docs: docs - }; - - var outpath = path.join(outdir, filename), - html = view.render('container.tmpl', docData); - - if (resolveLinks) { - html = helper.resolveLinks(html); // turn {@link foo} into foo - } - - fs.writeFileSync(outpath, html, 'utf8'); -} - -function generateSourceFiles(sourceFiles, encoding) { - encoding = encoding || 'utf8'; - Object.keys(sourceFiles).forEach(function(file) { - var source; - // links are keyed to the shortened path in each doclet's `meta.shortpath` property - var sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened); - helper.registerLink(sourceFiles[file].shortened, sourceOutfile); - - try { - source = { - kind: 'source', - code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, encoding) ) - }; - } - catch(e) { - logger.error('Error while generating source file %s: %s', file, e.message); - } - - generate('Source: ' + sourceFiles[file].shortened, [source], sourceOutfile, - false); - }); -} - -/** - * Look for classes or functions with the same name as modules (which indicates that the module - * exports only that class or function), then attach the classes or functions to the `module` - * property of the appropriate module doclets. The name of each class or function is also updated - * for display purposes. This function mutates the original arrays. - * - * @private - * @param {Array.} doclets - The array of classes and functions to - * check. - * @param {Array.} modules - The array of module doclets to search. - */ -function attachModuleSymbols(doclets, modules) { - var symbols = {}; - - // build a lookup table - doclets.forEach(function(symbol) { - symbols[symbol.longname] = symbols[symbol.longname] || []; - symbols[symbol.longname].push(symbol); - }); - - return modules.map(function(module) { - if (symbols[module.longname]) { - module.modules = symbols[module.longname] - // Only show symbols that have a description. Make an exception for classes, because - // we want to show the constructor-signature heading no matter what. - .filter(function(symbol) { - return symbol.description || symbol.kind === 'class'; - }) - .map(function(symbol) { - symbol = doop(symbol); - - if (symbol.kind === 'class' || symbol.kind === 'function') { - symbol.name = symbol.name.replace('module:', '(require("') + '"))'; - } - - return symbol; - }); - } - }); -} - -function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) { - var nav = ''; - - if (items.length) { - var itemsNav = ''; - - items.forEach(function(item) { - if ( !hasOwnProp.call(item, 'longname') ) { - itemsNav += '
  • ' + linktoFn('', item.name) + '
  • '; - } - else if ( !hasOwnProp.call(itemsSeen, item.longname) ) { - var displayName; - if (env.conf.templates.default.useLongnameInNav) { - displayName = item.longname; - } else { - displayName = item.name; - } - itemsNav += '
  • ' + linktoFn(item.longname, displayName.replace(/\b(module|event):/g, '')) + '
  • '; - - itemsSeen[item.longname] = true; - } - }); - - if (itemsNav !== '') { - nav += '

    ' + itemHeading + '

      ' + itemsNav + '
    '; - } - } - - return nav; -} - -function linktoTutorial(longName, name) { - return tutoriallink(name); -} - -function linktoExternal(longName, name) { - return linkto(longName, name.replace(/(^"|"$)/g, '')); -} - -/** - * Create the navigation sidebar. - * @param {object} members The members that will be used to create the sidebar. - * @param {array} members.classes - * @param {array} members.externals - * @param {array} members.globals - * @param {array} members.mixins - * @param {array} members.modules - * @param {array} members.namespaces - * @param {array} members.tutorials - * @param {array} members.events - * @param {array} members.interfaces - * @return {string} The HTML for the navigation sidebar. - */ -function buildNav(members) { - var nav = '

    Home

    '; - var seen = {}; - var seenTutorials = {}; - - nav += buildMemberNav(members.modules, 'Modules', {}, linkto); - nav += buildMemberNav(members.externals, 'Externals', seen, linktoExternal); - nav += buildMemberNav(members.classes, 'Classes', seen, linkto); - nav += buildMemberNav(members.events, 'Events', seen, linkto); - nav += buildMemberNav(members.namespaces, 'Namespaces', seen, linkto); - nav += buildMemberNav(members.mixins, 'Mixins', seen, linkto); - nav += buildMemberNav(members.tutorials, 'Tutorials', seenTutorials, linktoTutorial); - nav += buildMemberNav(members.interfaces, 'Interfaces', seen, linkto); - - if (members.globals.length) { - var globalNav = ''; - - members.globals.forEach(function(g) { - if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) { - globalNav += '
  • ' + linkto(g.longname, g.name) + '
  • '; - } - seen[g.longname] = true; - }); - - if (!globalNav) { - // turn the heading into a link so you can actually get to the global page - nav += '

    ' + linkto('global', 'Global') + '

    '; - } - else { - nav += '

    Global

      ' + globalNav + '
    '; - } - } - - return nav; -} - -/** - @param {TAFFY} taffyData See . - @param {object} opts - @param {Tutorial} tutorials - */ -exports.publish = function(taffyData, opts, tutorials) { - data = taffyData; - - var conf = env.conf.templates || {}; - conf.default = conf.default || {}; - - var templatePath = path.normalize(opts.template); - view = new template.Template( path.join(templatePath, 'tmpl') ); - - // claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness - // doesn't try to hand them out later - var indexUrl = helper.getUniqueFilename('index'); - // don't call registerLink() on this one! 'index' is also a valid longname - - var globalUrl = helper.getUniqueFilename('global'); - helper.registerLink('global', globalUrl); - - // set up templating - view.layout = conf.default.layoutFile ? - path.getResourcePath(path.dirname(conf.default.layoutFile), - path.basename(conf.default.layoutFile) ) : - 'layout.tmpl'; - - // set up tutorials for helper - helper.setTutorials(tutorials); - - data = helper.prune(data); - data.sort('longname, version, since'); - helper.addEventListeners(data); - - var sourceFiles = {}; - var sourceFilePaths = []; - data().each(function(doclet) { - doclet.attribs = ''; - - if (doclet.examples) { - doclet.examples = doclet.examples.map(function(example) { - var caption, code; - - if (example.match(/^\s*([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) { - caption = RegExp.$1; - code = RegExp.$3; - } - - return { - caption: caption || '', - code: code || example - }; - }); - } - if (doclet.see) { - doclet.see.forEach(function(seeItem, i) { - doclet.see[i] = hashToLink(doclet, seeItem); - }); - } - - // build a list of source files - var sourcePath; - if (doclet.meta) { - sourcePath = getPathFromDoclet(doclet); - sourceFiles[sourcePath] = { - resolved: sourcePath, - shortened: null - }; - if (sourceFilePaths.indexOf(sourcePath) === -1) { - sourceFilePaths.push(sourcePath); - } - } - }); - - // update outdir if necessary, then create outdir - var packageInfo = ( find({kind: 'package'}) || [] ) [0]; - if (packageInfo && packageInfo.name) { - outdir = path.join( outdir, packageInfo.name, (packageInfo.version || '') ); - } - fs.mkPath(outdir); - - // copy the template's static files to outdir - var fromDir = path.join(templatePath, 'static'); - var staticFiles = fs.ls(fromDir, 3); - - staticFiles.forEach(function(fileName) { - var toDir = fs.toDir( fileName.replace(fromDir, outdir) ); - fs.mkPath(toDir); - fs.copyFileSync(fileName, toDir); - }); - - // copy user-specified static files to outdir - var staticFilePaths; - var staticFileFilter; - var staticFileScanner; - if (conf.default.staticFiles) { - // The canonical property name is `include`. We accept `paths` for backwards compatibility - // with a bug in JSDoc 3.2.x. - staticFilePaths = conf.default.staticFiles.include || - conf.default.staticFiles.paths || - []; - staticFileFilter = new (require('jsdoc/src/filter')).Filter(conf.default.staticFiles); - staticFileScanner = new (require('jsdoc/src/scanner')).Scanner(); - - staticFilePaths.forEach(function(filePath) { - var extraStaticFiles; - - filePath = path.resolve(env.pwd, filePath); - extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter); - - extraStaticFiles.forEach(function(fileName) { - var sourcePath = fs.toDir(filePath); - var toDir = fs.toDir( fileName.replace(sourcePath, outdir) ); - fs.mkPath(toDir); - fs.copyFileSync(fileName, toDir); - }); - }); - } - - if (sourceFilePaths.length) { - sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) ); - } - data().each(function(doclet) { - var url = helper.createLink(doclet); - helper.registerLink(doclet.longname, url); - - // add a shortened version of the full path - var docletPath; - if (doclet.meta) { - docletPath = getPathFromDoclet(doclet); - docletPath = sourceFiles[docletPath].shortened; - if (docletPath) { - doclet.meta.shortpath = docletPath; - } - } - }); - - data().each(function(doclet) { - var url = helper.longnameToUrl[doclet.longname]; - - if (url.indexOf('#') > -1) { - doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop(); - } - else { - doclet.id = doclet.name; - } - - if ( needsSignature(doclet) ) { - addSignatureParams(doclet); - addSignatureReturns(doclet); - addAttribs(doclet); - } - }); - - // do this after the urls have all been generated - data().each(function(doclet) { - doclet.ancestors = getAncestorLinks(doclet); - - if (doclet.kind === 'member') { - addSignatureTypes(doclet); - addAttribs(doclet); - } - - if (doclet.kind === 'constant') { - addSignatureTypes(doclet); - addAttribs(doclet); - doclet.kind = 'member'; - } - }); - - var members = helper.getMembers(data); - members.tutorials = tutorials.children; - - // output pretty-printed source files by default - var outputSourceFiles = conf.default && conf.default.outputSourceFiles !== false ? true : - false; - - // add template helpers - view.find = find; - view.linkto = linkto; - view.resolveAuthorLinks = resolveAuthorLinks; - view.tutoriallink = tutoriallink; - view.htmlsafe = htmlsafe; - view.outputSourceFiles = outputSourceFiles; - - // once for all - view.nav = buildNav(members); - attachModuleSymbols( find({ longname: {left: 'module:'} }), members.modules ); - - // generate the pretty-printed source files first so other pages can link to them - if (outputSourceFiles) { - generateSourceFiles(sourceFiles, opts.encoding); - } - - if (members.globals.length) { generate('Global', [{kind: 'globalobj'}], globalUrl); } - - // index page displays information from package.json and lists files - var files = find({kind: 'file'}), - packages = find({kind: 'package'}); - - generate('Home', - packages.concat( - [{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}] - ).concat(files), - indexUrl); - - // set up the lists that we'll use to generate pages - var classes = taffy(members.classes); - var modules = taffy(members.modules); - var namespaces = taffy(members.namespaces); - var mixins = taffy(members.mixins); - var externals = taffy(members.externals); - var interfaces = taffy(members.interfaces); - - Object.keys(helper.longnameToUrl).forEach(function(longname) { - var myModules = helper.find(modules, {longname: longname}); - if (myModules.length) { - generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]); - } - - var myClasses = helper.find(classes, {longname: longname}); - if (myClasses.length) { - generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]); - } - - var myNamespaces = helper.find(namespaces, {longname: longname}); - if (myNamespaces.length) { - generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]); - } - - var myMixins = helper.find(mixins, {longname: longname}); - if (myMixins.length) { - generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]); - } - - var myExternals = helper.find(externals, {longname: longname}); - if (myExternals.length) { - generate('External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname]); - } - - var myInterfaces = helper.find(interfaces, {longname: longname}); - if (myInterfaces.length) { - generate('Interface: ' + myInterfaces[0].name, myInterfaces, helper.longnameToUrl[longname]); - } - }); - - // TODO: move the tutorial functions to templateHelper.js - function generateTutorial(title, tutorial, filename) { - var tutorialData = { - title: title, - header: tutorial.title, - content: tutorial.parse(), - children: tutorial.children - }; - - var tutorialPath = path.join(outdir, filename), - html = view.render('tutorial.tmpl', tutorialData); - - // yes, you can use {@link} in tutorials too! - html = helper.resolveLinks(html); // turn {@link foo} into foo - - fs.writeFileSync(tutorialPath, html, 'utf8'); - } - - // tutorials can have only one parent so there is no risk for loops - function saveChildren(node) { - node.children.forEach(function(child) { - generateTutorial('Tutorial: ' + child.title, child, helper.tutorialToUrl(child.name)); - saveChildren(child); - }); - } - saveChildren(tutorials); +var new (require('jsdoc/src/filter')).Filter(conf.default.staticFiles); +var new (require('jsdoc/src/scanner')).Scanner();; + + staticFilePaths.forEach(function (filePath) { + var extraStaticFiles; + + filePath = path.resolve(env.pwd, filePath); + extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter); + + extraStaticFiles.forEach(function (fileName) { + var sourcePath = fs.toDir(filePath); + var toDir = fs.toDir( fileName.replace(sourcePath, outdir) ); + fs.mkPath(toDir); + fs.copyFileSync(fileName, toDir); + }); + }); + } + + if (sourceFilePaths.length) { + sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) ); + } + data().each(function (doclet) { + var docletPath; + var url = helper.createLink(doclet); + if (doclet.meta) { + docletPath = getPathFromDoclet(doclet); + docletPath = sourceFiles[docletPath].shortened; + if (docletPath) { + doclet.meta.shortpath = docletPath; + } + } + }); + + data().each(function (doclet) { + var url = helper.longnameToUrl[doclet.longname]; + + if (url.indexOf('#') > -1) { + doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop(); + } + else { + doclet.id = doclet.name; + } + + if ( needsSignature(doclet) ) { + addSignatureParams(doclet); + addSignatureReturns(doclet); + addAttribs(doclet); + } + }); + + // do this after the urls have all been generated + data().each(function (doclet) { + doclet.ancestors = getAncestorLinks(doclet); + + if (doclet.kind === 'member') { + addSignatureTypes(doclet); + addAttribs(doclet); + } + + if (doclet.kind === 'constant') { + addSignatureTypes(doclet); + addAttribs(doclet); + doclet.kind = 'member'; + } + }); + + var members = helper.getMembers(data); + members.tutorials = tutorials.children; + + // output pretty-printed source files by default + var outputSourceFiles = conf.default && conf.default.outputSourceFiles !== false ? true : + false; + + // add template helpers + view.find = find; + view.linkto = linkto; + view.resolveAuthorLinks = resolveAuthorLinks; + view.tutoriallink = tutoriallink; + view.htmlsafe = htmlsafe; + view.outputSourceFiles = outputSourceFiles; + + // once for all + view.nav = buildNav(members); + attachModuleSymbols( find({ + longname: { +left: 'module:' +}}), members.modules ); + + // generate the pretty-printed source files first so other pages can link to them + if (outputSourceFiles) { + generateSourceFiles(sourceFiles, opts.encoding); + } + + if (members.globals.length) { generate('Global', [{ +kind: 'globalobj' +}], globalUrl); } + + // index page displays information from package.json and lists files + var files = find({ +kind: 'file' +}), + packages = find({ +kind: 'package' +}); + + generate('Home', packages.concat([{ +kind: 'mainpage', +readme: opts.readme, +longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page' +}]).concat(files), indexUrl); + + // set up the lists that we'll use to generate pages + var classes = taffy(members.classes); + var modules = taffy(members.modules); + var namespaces = taffy(members.namespaces); + var mixins = taffy(members.mixins); + var externals = taffy(members.externals); + var interfaces = taffy(members.interfaces); + + Object.keys(helper.longnameToUrl).forEach(function (longname) { + var myNamespaces = helper.find(namespaces, {longname: longname}); + var myInterfaces = helper.find(interfaces, {longname: longname}); + var myExternals = helper.find(externals, {longname: longname}); + var myModules = helper.find(modules, {longname: longname}); + var myClasses = helper.find(classes, {longname: longname}); + var myMixins = helper.find(mixins, {longname: longname}); + if (myInterfaces.length) { + generate('Interface: ' + myInterfaces[0].name, myInterfaces, helper.longnameToUrl[longname]); + } + }); + + // TODO: move the tutorial functions to templateHelper.js + function generateTutorial(title, tutorial, filename) { + var tutorialData = { + title: title, + header: tutorial.title, + content: tutorial.parse(), + children: tutorial.children + }; + + var tutorialPath = path.join(outdir, filename), + html = view.render('tutorial.tmpl', tutorialData); + + // yes, you can use {@link} in tutorials too! + html = helper.resolveLinks(html); // turn {@link foo} into foo + + fs.writeFileSync(tutorialPath, html, 'utf8'); + } + + // tutorials can have only one parent so there is no risk for loops + function saveChildren(node) { + node.children.forEach(function (child) { + generateTutorial('Tutorial: ' + child.title, child, helper.tutorialToUrl(child.name)); + saveChildren(child); + }); + } + saveChildren(tutorials); }; diff --git a/tools/docs/jsdoc/templates/html/static/css/jsdoc-default.css b/tools/docs/jsdoc/templates/html/static/css/jsdoc-default.css index b88b0cca3fdd..8a19f595f9b7 100644 --- a/tools/docs/jsdoc/templates/html/static/css/jsdoc-default.css +++ b/tools/docs/jsdoc/templates/html/static/css/jsdoc-default.css @@ -1,218 +1,218 @@ @font-face { - font-family: 'Open Sans'; - font-weight: normal; - font-style: normal; - src: url('../fonts/opensans-regular-webfont.eot'); - src: - local('Open Sans'), - local('OpenSans'), - url('../fonts/opensans-regular-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/opensans-regular-webfont.woff') format('woff'), - url('../fonts/opensans-regular-webfont.svg#open_sansregular') format('svg'); + font-family: 'Open Sans'; + font-weight: normal; + font-style: normal; + src: url('../fonts/opensans-regular-webfont.eot'); + src: + local('Open Sans'), + local('OpenSans'), + url('../fonts/opensans-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/opensans-regular-webfont.woff') format('woff'), + url('../fonts/opensans-regular-webfont.svg#open_sansregular') format('svg'); } @font-face { - font-family: 'Open Sans Light'; - font-weight: normal; - font-style: normal; - src: url('../fonts/opensans-light-webfont.eot'); - src: - local('Open Sans Light'), - local('OpenSans Light'), - url('../fonts/opensans-light-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/opensans-light-webfont.woff') format('woff'), - url('../fonts/opensans-light-webfont.svg#open_sanslight') format('svg'); + font-family: 'Open Sans Light'; + font-weight: normal; + font-style: normal; + src: url('../fonts/opensans-light-webfont.eot'); + src: + local('Open Sans Light'), + local('OpenSans Light'), + url('../fonts/opensans-light-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/opensans-light-webfont.woff') format('woff'), + url('../fonts/opensans-light-webfont.svg#open_sanslight') format('svg'); } html { - overflow: auto; - background-color: #fff; - font-size: 14px; + overflow: auto; + background-color: #fff; + font-size: 14px; } body { - font-family: 'Open Sans', sans-serif; - line-height: 1.5; - color: #4d4e53; - background-color: white; + font-family: 'Open Sans', sans-serif; + line-height: 1.5; + color: #4d4e53; + background-color: white; } a, a:visited, a:active { - color: #0095dd; - text-decoration: none; + color: #0095dd; + text-decoration: none; } a:hover { - text-decoration: underline; + text-decoration: underline; } header { - display: block; - padding: 0px 4px; + display: block; + padding: 0px 4px; } tt, code, kbd, samp { - font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-family: Consolas, Monaco, 'Andale Mono', monospace; } .class-description { - font-size: 130%; - line-height: 140%; - margin-bottom: 1em; - margin-top: 1em; + font-size: 130%; + line-height: 140%; + margin-bottom: 1em; + margin-top: 1em; } .class-description:empty { - margin: 0; + margin: 0; } #main { - float: left; - width: 70%; + float: left; + width: 70%; } article dl { - margin-bottom: 40px; + margin-bottom: 40px; } section { - display: block; - background-color: #fff; - padding: 12px 24px; - border-bottom: 1px solid #ccc; - margin-right: 30px; + display: block; + background-color: #fff; + padding: 12px 24px; + border-bottom: 1px solid #ccc; + margin-right: 30px; } .variation { - display: none; + display: none; } .signature-attributes { - font-size: 60%; - color: #aaa; - font-style: italic; - font-weight: lighter; + font-size: 60%; + color: #aaa; + font-style: italic; + font-weight: lighter; } nav { - display: block; - float: right; - margin-top: 28px; - width: 30%; - box-sizing: border-box; - border-left: 1px solid #ccc; - padding-left: 16px; + display: block; + float: right; + margin-top: 28px; + width: 30%; + box-sizing: border-box; + border-left: 1px solid #ccc; + padding-left: 16px; } nav ul { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; - font-size: 100%; - line-height: 17px; - padding: 0; - margin: 0; - list-style-type: none; + font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; + font-size: 100%; + line-height: 17px; + padding: 0; + margin: 0; + list-style-type: none; } nav ul a, nav ul a:visited, nav ul a:active { - font-family: Consolas, Monaco, 'Andale Mono', monospace; - line-height: 18px; - color: #4D4E53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + line-height: 18px; + color: #4D4E53; } nav h3 { - margin-top: 12px; + margin-top: 12px; } nav li { - margin-top: 6px; + margin-top: 6px; } footer { - display: block; - padding: 6px; - margin-top: 12px; - font-style: italic; - font-size: 90%; + display: block; + padding: 6px; + margin-top: 12px; + font-style: italic; + font-size: 90%; } h1, h2, h3, h4 { - font-weight: 200; - margin: 0; + font-weight: 200; + margin: 0; } h1 { - font-family: 'Open Sans Light', sans-serif; - font-size: 48px; - letter-spacing: -2px; - margin: 12px 24px 20px; + font-family: 'Open Sans Light', sans-serif; + font-size: 48px; + letter-spacing: -2px; + margin: 12px 24px 20px; } h2, h3 { - font-size: 30px; - font-weight: 700; - letter-spacing: -1px; - margin-bottom: 12px; + font-size: 30px; + font-weight: 700; + letter-spacing: -1px; + margin-bottom: 12px; } h4 { - font-size: 18px; - letter-spacing: -0.33px; - margin-bottom: 12px; - color: #4d4e53; + font-size: 18px; + letter-spacing: -0.33px; + margin-bottom: 12px; + color: #4d4e53; } h5, .container-overview .subsection-title { - font-size: 120%; - font-weight: bold; - letter-spacing: -0.01em; - margin: 8px 0 3px 0; + font-size: 120%; + font-weight: bold; + letter-spacing: -0.01em; + margin: 8px 0 3px 0; } h6 { - font-size: 100%; - letter-spacing: -0.01em; - margin: 6px 0 3px 0; - font-style: italic; + font-size: 100%; + letter-spacing: -0.01em; + margin: 6px 0 3px 0; + font-style: italic; } .ancestors { color: #999; } .ancestors a { - color: #999 !important; - text-decoration: none; + color: #999 !important; + text-decoration: none; } .clear { - clear: both; + clear: both; } .important { - font-weight: bold; - color: #950B02; + font-weight: bold; + color: #950B02; } .yes-def { - text-indent: -1000px; + text-indent: -1000px; } .type-signature { - color: #aaa; + color: #aaa; } .name, .signature { - font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-family: Consolas, Monaco, 'Andale Mono', monospace; } .details { margin-top: 14px; border-left: 2px solid #DDD; } @@ -225,110 +225,110 @@ h6 .details .object-value { padding-top: 0; } .description { - margin-bottom: 1em; - margin-top: 1em; + margin-bottom: 1em; + margin-top: 1em; } .code-caption { - font-style: italic; - font-size: 107%; - margin: 0; + font-style: italic; + font-size: 107%; + margin: 0; } .prettyprint { - border: 1px solid #ddd; - width: 80%; - overflow: auto; + border: 1px solid #ddd; + width: 80%; + overflow: auto; } .prettyprint.source { - width: inherit; + width: inherit; } .prettyprint code { - font-size: 100%; - line-height: 18px; - display: block; - padding: 4px 12px; - margin: 0; - background-color: #fff; - color: #4D4E53; + font-size: 100%; + line-height: 18px; + display: block; + padding: 4px 12px; + margin: 0; + background-color: #fff; + color: #4D4E53; } .prettyprint code span.line { - display: inline-block; + display: inline-block; } .prettyprint.linenums { - padding-left: 70px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; + padding-left: 70px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } .prettyprint.linenums ol { - padding-left: 0; + padding-left: 0; } .prettyprint.linenums li { - border-left: 3px #ddd solid; + border-left: 3px #ddd solid; } .prettyprint.linenums li.selected, .prettyprint.linenums li.selected * { - background-color: lightyellow; + background-color: lightyellow; } .prettyprint.linenums li * { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; } .params, .props { - border-spacing: 0; - border: 0; - border-collapse: collapse; + border-spacing: 0; + border: 0; + border-collapse: collapse; } .params .name, .props .name, .name code { - color: #4D4E53; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 100%; + color: #4D4E53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 100%; } .params td, .params th, .props td, .props th { - border: 1px solid #ddd; - margin: 0px; - text-align: left; - vertical-align: top; - padding: 4px 6px; - display: table-cell; + border: 1px solid #ddd; + margin: 0px; + text-align: left; + vertical-align: top; + padding: 4px 6px; + display: table-cell; } .params thead tr, .props thead tr { - background-color: #ddd; - font-weight: bold; + background-color: #ddd; + font-weight: bold; } .params .params thead tr, .props .props thead tr { - background-color: #fff; - font-weight: bold; + background-color: #fff; + font-weight: bold; } .params th, .props th { border-right: 1px solid #aaa; } @@ -337,17 +337,17 @@ h6 .params td.description > p:first-child, .props td.description > p:first-child { - margin-top: 0; - padding-top: 0; + margin-top: 0; + padding-top: 0; } .params td.description > p:last-child, .props td.description > p:last-child { - margin-bottom: 0; - padding-bottom: 0; + margin-bottom: 0; + padding-bottom: 0; } .disabled { - color: #454545; + color: #454545; } diff --git a/tools/docs/jsdoc/templates/html/static/js/script.js b/tools/docs/jsdoc/templates/html/static/js/script.js index ee9312936880..e89bd7cc219f 100644 --- a/tools/docs/jsdoc/templates/html/static/js/script.js +++ b/tools/docs/jsdoc/templates/html/static/js/script.js @@ -1,32 +1,32 @@ (function() { - 'use strict'; + 'use strict'; - var elements; - var newChild; - var parent; - var tex; - var el; - var i; + var elements; + var newChild; + var parent; + var tex; + var el; + var i; - elements = document.querySelectorAll( '.lang-tex' ); + elements = document.querySelectorAll( '.lang-tex' ); - for ( i = 0; i < elements.length; i++ ) { - el = elements[ i ]; + for ( i = 0; i < elements.length; i++ ) { + el = elements[ i ]; - // Get the TeX code: - tex = el.querySelector( 'code' ).innerHTML; + // Get the TeX code: + tex = el.querySelector( 'code' ).innerHTML; - // Create a new element for rendering TeX: - newChild = document.createElement( 'div' ); + // Create a new element for rendering TeX: + newChild = document.createElement( 'div' ); - // Set the child's content: - newChild.innerHTML = '\\[' + tex + '\\]'; + // Set the child's content: + newChild.innerHTML = '\\[' + tex + '\\]'; - // Get a reference to the parent node: - parent = el.parentNode; + // Get a reference to the parent node: + parent = el.parentNode; - // Replace the old child: - parent.replaceChild( newChild, el ); - } + // Replace the old child: + parent.replaceChild( newChild, el ); + } })(); diff --git a/tools/docs/jsdoc/templates/html/tmpl/container.tmpl b/tools/docs/jsdoc/templates/html/tmpl/container.tmpl index 4bbe3e265000..5b7c0bd39642 100644 --- a/tools/docs/jsdoc/templates/html/tmpl/container.tmpl +++ b/tools/docs/jsdoc/templates/html/tmpl/container.tmpl @@ -23,7 +23,7 @@

    diff --git a/tools/docs/jsdoc/templates/html/tmpl/examples.tmpl b/tools/docs/jsdoc/templates/html/tmpl/examples.tmpl index 04d975e96dc5..dc317fc6afe9 100644 --- a/tools/docs/jsdoc/templates/html/tmpl/examples.tmpl +++ b/tools/docs/jsdoc/templates/html/tmpl/examples.tmpl @@ -10,4 +10,4 @@
    \ No newline at end of file +?> diff --git a/tools/docs/jsdoc/templates/html/tmpl/returns.tmpl b/tools/docs/jsdoc/templates/html/tmpl/returns.tmpl index d07045920ae4..d10e77bd185b 100644 --- a/tools/docs/jsdoc/templates/html/tmpl/returns.tmpl +++ b/tools/docs/jsdoc/templates/html/tmpl/returns.tmpl @@ -16,4 +16,4 @@ if (data.description) { - \ No newline at end of file + diff --git a/tools/docs/jsdoc/templates/html/tmpl/source.tmpl b/tools/docs/jsdoc/templates/html/tmpl/source.tmpl index e559b5d10388..f4aee6b50900 100644 --- a/tools/docs/jsdoc/templates/html/tmpl/source.tmpl +++ b/tools/docs/jsdoc/templates/html/tmpl/source.tmpl @@ -5,4 +5,4 @@
    - \ No newline at end of file + diff --git a/tools/docs/jsdoc/templates/html/tmpl/type.tmpl b/tools/docs/jsdoc/templates/html/tmpl/type.tmpl index ec2c6c0df721..a35c7758187d 100644 --- a/tools/docs/jsdoc/templates/html/tmpl/type.tmpl +++ b/tools/docs/jsdoc/templates/html/tmpl/type.tmpl @@ -4,4 +4,4 @@ data.forEach(function(name, i) { ?> | - \ No newline at end of file + diff --git a/tools/make/README.md b/tools/make/README.md index a2b918d0eeea..6791f3cd6859 100644 --- a/tools/make/README.md +++ b/tools/make/README.md @@ -22,7 +22,7 @@ limitations under the License. > Development utility. -This project uses [`make`][make] as its development utility. For an overview of `make`, see the `make` [manual][make]. +This project uses [`make`][make] as its development utility. For an overview of `make`, see the `make` [manual][make]. ## Usage diff --git a/tools/make/lib/benchmark/README.md b/tools/make/lib/benchmark/README.md index 151dbbad39d1..b12bd0b598fc 100644 --- a/tools/make/lib/benchmark/README.md +++ b/tools/make/lib/benchmark/README.md @@ -72,7 +72,7 @@ $ make benchmark-lang The command supports the environment variables supported by each language-specific (`benchmark-`) command documented below. -This command is useful when wanting to glob for benchmark files, irrespective of language, for a particular package in order to compare cross-language performance. +This command is useful when wanting to glob for benchmark files, irrespective of language, for a particular package in order to compare cross-language performance. * * * diff --git a/tools/make/lib/examples/README.md b/tools/make/lib/examples/README.md index e4ae06ab649c..1982cd61021c 100644 --- a/tools/make/lib/examples/README.md +++ b/tools/make/lib/examples/README.md @@ -72,7 +72,7 @@ $ make examples-lang The command supports the environment variables supported by each language-specific (`examples-`) command documented below. -This command is useful when wanting to glob for examples files, irrespective of language, for a particular package in order to compare cross-language behavior. +This command is useful when wanting to glob for examples files, irrespective of language, for a particular package in order to compare cross-language behavior. * * * diff --git a/tools/make/lib/ls/pkgs/unpublished.mk b/tools/make/lib/ls/pkgs/unpublished.mk index 283115a22bc0..3f876b1ef8b1 100644 --- a/tools/make/lib/ls/pkgs/unpublished.mk +++ b/tools/make/lib/ls/pkgs/unpublished.mk @@ -42,4 +42,4 @@ list-pkgs-unpublished: done; \ echo "$$unpublished_pkgs" -.PHONY: list-pkgs-unpublished \ No newline at end of file +.PHONY: list-pkgs-unpublished diff --git a/tools/make/lib/tools-test/README.md b/tools/make/lib/tools-test/README.md index 319ace904404..ebc5a48b5e9a 100644 --- a/tools/make/lib/tools-test/README.md +++ b/tools/make/lib/tools-test/README.md @@ -8,7 +8,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tools/snippets/benchmark/fortran/benchmark.f b/tools/snippets/benchmark/fortran/benchmark.f index f8dedc5357d3..5235b1b8496d 100644 --- a/tools/snippets/benchmark/fortran/benchmark.f +++ b/tools/snippets/benchmark/fortran/benchmark.f @@ -177,4 +177,4 @@ subroutine main() end do call print_summary( repeats, repeats ) end subroutine main -end program bench \ No newline at end of file +end program bench diff --git a/tools/snippets/benchmark/fortran/native/benchmark.f b/tools/snippets/benchmark/fortran/native/benchmark.f index 48431d53f97d..69e66ebe7cee 100644 --- a/tools/snippets/benchmark/fortran/native/benchmark.f +++ b/tools/snippets/benchmark/fortran/native/benchmark.f @@ -177,4 +177,4 @@ subroutine main() end do call print_summary( repeats, repeats ) end subroutine main -end program bench \ No newline at end of file +end program bench diff --git a/tools/snippets/benchmark/fortran/native/benchmark.length.f b/tools/snippets/benchmark/fortran/native/benchmark.length.f index df4e16c50a33..7ef786c254be 100644 --- a/tools/snippets/benchmark/fortran/native/benchmark.length.f +++ b/tools/snippets/benchmark/fortran/native/benchmark.length.f @@ -214,4 +214,4 @@ subroutine main() end do call print_summary( count, count ) end subroutine main -end program bench \ No newline at end of file +end program bench