# wulechuan-js-get-valid-indentation-string
**Repository Path**: nanchang-wulechuan/wulechuan-js-get-valid-indentation-string
## Basic Information
- **Project Name**: wulechuan-js-get-valid-indentation-string
- **Description**: This program produces a string that could be used as a single level of indentation in any compute programing language source codes. Or throws an error if it fails to evaluate such a string. The said string contains either all spaces(spacebar), or all tabs(`'\t'`). But it is not allowed to contain a mix of space and tab.
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-03-09
- **Last Updated**: 2022-07-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 获取有效的代码缩进字符串
> 中国人——特别是汉族人,理应坚持广泛、规范地使用汉语。凡非必要之情形不说外国话、不用外国字。此乃天经地义!然则每当必要,亦不排斥采用外国之语言。不妨 **博世界之学问,养中国之精神** 。
>
> 本人亦支持少数民族坚持采用自己民族的传统语言。仍须强调,凡中国人,皆应会用汉语、积极使用汉语,此乃中华各民族之大一统之必由。
## Multilingual Editions of this Article
- [English edition of this ReadMe](./文档集/说明书/ReadMe.en-US.md)
## NPM 页
NPM 包名
[@wulechuan/get-valid-indentation-string](https://www.npmjs.com/package/@wulechuan/get-valid-indentation-string)
作者
南昌吴乐川
## 源代码仓库
| 提供仓库服务之组织 | 仓库组织之国别 | 仓库地址 |
| ------------- | :----------: | ------- |
| 码云 | 中华人民共和国 | [https://gitee.com/nanchang-wulechuan/wulechuan-js-get-valid-indentation-string.git](https://gitee.com/nanchang-wulechuan/wulechuan-js-get-valid-indentation-string.git) |
| 阿里云之代码仓库 | 中华人民共和国 | [https://code.aliyun.com/wulechuan/wulechuan-js-get-valid-indentation-string.git](https://code.aliyun.com/wulechuan/wulechuan-js-get-valid-indentation-string.git) |
| GitHub | 美 | [https://github.com/wulechuan/wulechuan-js-get-valid-indentation-string.git](https://github.com/wulechuan/wulechuan-js-get-valid-indentation-string.git) |
## 版本断代提醒
- 本工具自 `v2.0.0` 版始,*源带码文件夹*、*测试集文件夹*、*源代码接口*、*控制台消息文本* 均已汉化。虽然旧的英语版接口得以保留,单从编程角度而言,版本并不“断代”,但因文件夹和消息文本仅采用汉语,故对于不识汉语之开发者而言,形同“版本断代”。
## 简介
### 功用
本工具可按需产生一个字符串,该字符串用作计算机源代码之单级缩进之空白。该字符串要么全是“空格”(`' '`),要么全是“制表符”(`'\t'`),但二者不可混用。并且,多于一个制表符是允许的,但本程序会给出警告信息。因为,一般的,我们仅需采用单一制表符。
> 注意,本程序故意未提供所谓“默认值”。因此,本程序既不迎合喜欢采用“制表符”的程序员们,也不迎合喜欢采用“两个空格”的程序员们,也不迎合我本人喜欢的“四个空格”的风格。调用本程序时,如果对外界提供的“期望值”不信任,则必须明确给出一个所谓“后备值”,或者说“默认值”。
## 用法
### 安装
```sh
npm i @wulechuan/get-valid-indentation-string
```
### 具体示例
本工具仅提供唯一的函数作为所谓“*主程序*”,但故意给出汉语、英语两种名称。二者互为别名,效用完全对等。
其汉语名称为 `求可靠的用于计算机源代码缩进的空白文本`。该函数接受三个参数,详见下文《[应用编程接口(所谓 API)](#应用编程接口所谓-api)》。
本项目代码库中自带的 `./测试集/index.js` 是较充分的示范代码。摘抄如下(有所精简)。
```js
const { 求可靠的用于计算机源代码缩进的空白文本 } = require('@wulechuan/get-valid-indentation-string')
试一把() // 会抛出错误,因为“期望值”、“备用值”均不合格。
试一把(3) // 采纳三个空格,即' '。
试一把('3') // 采纳三个空格,即' '。
试一把(' 8 ') // 采纳八个空格,即' '。
// 采纳两个空格,即' '。在“繁冗汇报模式”还会在控制台打印“期望值”无效的细节说明。
试一把(-1, ' ')
// 会抛出错误,因为“期望值”、“备用值”均不合格。
试一把('-2', ' \n ')
// 采纳一个制表符,即'\t'。
试一把('\t', ' ')
// 采纳四个空格,即' '。因为空格与制表符混用是不允许的。并且,在“繁冗汇报模式”还会在控制台打印“期望值”无效的细节说明。
试一把(' \t', ' ')
// 采纳两个空格,即' '。
试一把('', ' ')
// 会抛出错误,因为“期望值(六十七个空格)”太长了,超出限度,同时“备用值”又未给出。
试一把(' '.repeat(67))
// 会抛出错误,因为不允许采用布尔值,同时“备用值”又未给出。
试一把(true)
// 下方代码的期望值是有效的,会被采纳,即采纳两个制表符('\t\t')。
// 但在被采纳的同时,控制台还会给出一则警告信息,提及制表符多于一个。
// 诸君不妨思考一下,果真有必要采用超过一个制表符来当做“单级别”缩进吗?
试一把('\t\t')
// 会抛出错误,因为不允许空格与制表符混用,同时“备用值”又未给出。
试一把(' \t')
function 试一把 (期望采用的缩进空白之配置, 保险的备用配置) {
try {
// 请留意下方的函数调用语句。
求可靠的用于计算机源代码缩进的空白文本(
期望采用的缩进空白之配置,
保险的备用配置,
true
)
} catch(错误之记载) {
console.log(错误之记载.message)
}
}
```
### 应用编程接口(所谓 API)
#### 主函数
本工具仅提供唯一的函数作为对外接口,但故意给出汉语、英语两种名称。二者互为别名,效用完全对等。
##### 主函数之接口全貌(外国话所谓 Signature)
```ts
function 求可靠的用于计算机源代码缩进的空白文本 (
期望采用的缩进空白配置: any,
保险的备用缩进空白配置?: string | number,
应在控制台记录运行细节?: boolean
): string
function getValidIndentationString (
providedIndentation: any,
fallbackValue?: string | number,
shouldLogVerbosely?: boolean
): string
```
##### 主函数之入口参数
###### `期望采用的缩进空白配置`(`providedIndentation`)
该值不能省略。可以取任何值,但仅当值有效时会被采纳,无效值不被采纳。当该值无效时,主函数转而尝试采用 `保险的备用缩进空白配置`(`fallbackValue`) 的值。
> 所谓“有效”的值,参见下文《[主函数中的两个主要参数取怎样的值算是有效值?](#主函数中的两个主要参数取怎样的值算是有效值?)》一节。
###### `保险的备用缩进空白配置`(`fallbackValue`)
该值可以省略。如果 `期望采用的缩进空白配置` 一值无效,主函数才会考察本值(即指 `保险的备用缩进空白配置`)。虽然本值可传入任何值,但仅当值有效时会被采纳。如果本值被判无效,则主函数抛出错误。
> 所谓“有效”的值,参见下文《[主函数中的两个主要参数取怎样的值算是有效值?](#主函数中的两个主要参数取怎样的值算是有效值?)》一节。
###### `应在控制台记录运行细节`(`shouldLogVerbosely`)
该值可以省略。其取值可以是任意值,但会被视作布尔值。当该值为“真性(truthy)”时:
- 如果主函数最终采纳了一个有效值,则会在控制台打印出最终采纳的值,供人类审阅。
- 如果给出的原始值有任何错误,那么,不论本程序最终是否(借助“后备值”)得到一个有效值,均会在控制台打印出与原始值相关的错误信息。
> 注意
>
> 若传入的 `期望采用的缩进空白配置` 和 `保险的备用缩进空白配置` 均无效,则**本程序抛出错误。**
##### 主函数中的两个主要参数取怎样的值算是有效值?
所谓有效的值,应符合以下规则之任一:
- 四舍五入后大于 `0` 且小于等于 `50` 的数字值。视作用于代码缩进**一级**所采用的空格之个数。
- 包含上述数字的字符串值,例如 `'4'` 或 `" 8 "`。含义同上。
- 一个**仅**包含**空格**的字符串,其中的空格数量不少于 `1` 且不多于 `50`(可以等于 `1`,可以等于 `50`)。
- 一个**仅**包含**制表符**的字符串,其中的制表符数量不少于 `1` 且不多于 `16`(可以等于 `1`,可以等于 `16`)。但仅推荐采用单一制表符。一般情况我认为根本没必要使用两个或更多制表符。
以下枚举(但不穷举)一些有效值:
- `4`、
- `'4'`、
- `' 4 '`、
- `' '`、
- `" "`、
- `' '`、
- `'\t'`、
- `"\t"`、
- `'\t\t'`。
##### 主函数之返回值
该函数总是返回一个`字符串`值。如果输入不合规,该函数并不作返回,而是故意抛出错误。