使用 .editorconfig 文件来统一编程风格

news2024/11/23 6:33:44

做过长期开发的程序员都知道保持编程风格统一的重要性, 统一的风格能够降低各种成本.

有一句名言是咋说的来着? 代码主要是给人看的, 其次才是给电脑去运行.

但另一方面, 大家又普遍是偷懒的, 对于这些长期会受益, 但短期收益不明显甚至带来麻烦的事, 许多团队中的成员不能说抵制吧, 但至少是积极性不高的.

此时, 假如你是一个团队的领导者, 怎么才能有效地保持项目中编程风格的统一呢? 下面介绍的这个 .editorconfig 文件的方式将能有效地帮助我们.

.editorconfig 文件及作用

其实它就是一个类似于 ini 之类的配置文件, 而它的名字 editor config 显然也暗示了它是用于配置(config)编辑器(editor)的.

至于前面开头的那个点".", 这个在 windows 系统下将不会有什么作用;

在 linux 之类的系统上, 这个表示隐藏文件, 因为这些配置文件通常而言不需要普通成员了解及改动, 所以设置为一般情况下不显示.

具体而言它的作用是: 帮助工作在同一个项目的使用不同的编辑器和 IDE 的众多开发者维持统一的编程风格.

EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.

下面是一个在 IDEA IDE 中项目里该文件的截图:

.editorconfig file demo in Intellij IDEA

通常, 你至少需要在项目的根文件下放置一个.

具体配置项及含义

虽然这个文件没有后缀名(或者说只有后缀名), 但它其实就是一个普通的文本文件, 任何的文本文件编辑器都可以直接打开它.

.editorconfig file content demo

我们直接看下它的内容:

root = true

[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

就是一行一行的配置项, 关于编码, 缩进, 换行等等的规定.

比如上述的 charset = utf-8 的就配置了工程的文本编码缺省都用 utf-8;

又如 indent_style = space 则规定了整个工程使用空格来缩进, 而 indent_size = 4 则规定具体缩进 4 个空格;

end_of_line = lf 则规定了使用 unix(linux) 风格的换行符(lf), 而不是 windows 回车+换行风格的 crlf;

等等…

更多的配置项及高级用法, 请参考其官网 https://editorconfig.org/.

比如, 除了在项目的根目录下放置此文件外, 你还可以在子文件夹内放置它, 以进行更细微的控制, 规则将综合起作用;

又如, 除了将缩进风格统一为 4 空格的粗暴方式外, 你还可以控制根据文件后缀名进行细微控制, 比如 js 才用 2 空格, 而 java 用 4 空格;

还支持各种通配符的设置等等, 这里不一一介绍

作用机制

当然, 你可能会好奇, 为什么在这个文件设置了这些, 它就能起作用呢?

自然, 这离不开 IDE(编辑器)本身对这些文件的支持(可能是直接集成或是通过插件的方式).

比如 Intellij IDEA 就直接集成了对它的支持, Visual Studio 也是如此;

而 Eclipse 和 Visual Studio Code 则可能需要安装插件, 在其插件库中搜 editorconfig 关键字即能找到相关插件.

后续的版本也许可能直接支持, 但目前据我所知是没有直接支持.

另: 除了重量级的 IDE, 很多轻量级的编辑器也是有插件支持的, 具体见官网介绍, 如 Atom, Sublime 之类的.

对于 IDE 而言, 一个很好的观察角度是看这个文件上的图标, 如果该文件上有特殊的图标(以及打开时有代码高亮之类的), 则说明是有相关支持的.

而如果是普通文本图标, 而打开也只是一个普通文本显示, 则说明没有得到支持, 则可能需要安装相关插件.

另一方面, 许多 IDE 本身会有这些代码风格的设置, 对于支持 .editorconfig 文件的(或是安装了插件后支持的) IDE, .editorconfig 文件配置的规则就会作用到这些设置上.

这就带来了一个好处, 无需让团队成员一一去设置, 也避免了一些成员由于犯懒或规范意识不高而不去做这些设置的问题.

引入时机及版本管理要求

显然, 通过了解 .editorconfig 文件的作用, 我们不能猜测到, 引入这个配置文件的最佳时机显然就是在项目的创建之初, 有了它, 各类规则就有了落地的具体载体, 团队成员有机会明确知道项目有哪些具体代码风格上的规范.

另一方面, 成员后续创建并提交的各类源代码文件也会受到它所配置规则的约束, 从而形成统一的风格.

如果没有一开始引入, 后期也是可以引入的, 自然, 越早越好.

而这个配置文件自然也是需要纳入版本管理(git 或 svn), 直接提交到代码仓库中的. 这样一来, 项目成员只要拉取了代码, 就能获取到这些配置了.

同时, 后续的新规则补充或旧规则调整都能很方便同步到各个成员中.

延伸思考: 如何做好项目管理

最后, 想借此机会谈谈如何去做好项目的管理. 比如你现在是一个项目的负责人, 自然, 你自己首先要有规范化的意识, 然后才能去推动整个项目朝着规范化方向前进.

可是, 任何一个有经验的管理者都知道, 事情没有那么简单, 你可能开了好几次会议, 形成了很多决议, 大家也似乎意识到了统一规范的重要, 但在后续的实际运行中, 你也还是可能发现大家慢慢又不遵循规范了.

甚至在一开始就没有遵循!

好的管理者一定是深谙人性的, 而人就是无时不刻想犯懒想省事的, 这或许是最大的人性.

很多时候, 甚至不需要去说别人, 我们想想我们自己是不是这样的?

因此, 很多事情如果你只是靠嘴去说说, 到最后你已经说到厌烦不想再说的时候, 事情最终就又还是回到老样子.

当你不想再说时, 你也犯懒了!

真要把事情做好, 你是需要一些技巧的, 这通常就表现为借助一些工具而非依赖于人的觉悟, 而这里介绍的 .editorconfig 正是这样一个工具, 有助于你达到自己的目的.

相比于各种工具与机制, 人的觉悟实在是太不可靠了, 是不值得依赖的.

另一方面, 好的管理者一定要有成本意识. 当你要做一件事情的时候, 你需要找到一个成本最低的方式, 如果你的方式需要大家做很多配合, 往往大家是不愿意的, 因为这给大家带来了成本, 而你反复去鼓动大家, 又给你带来了成本, 而最终事情却还是可能不能如你所愿.

因此, 很多时候你需要找到一个方便, 不那么麻烦的方式, 而这才能为大家所接受.

这通常也是阻力最小的方式, 而这往往又是最终成功的保障.

如果你只是在会议上对大家说, 不要怕麻烦, 长期来看这事受益很大, 但短视也是人性呀, 大家听到你的话可能不过是眨眨眼睛, 后面该干嘛还是干嘛.

把问题消灭在萌芽阶段, 这是你需要的, 也是成本最低的, 同时, 尽量少给大家带来麻烦, 甚至是大家不知不觉地就被规范起来了, 这才是最容易被接受的方案.

随风潜入夜, 润物细无声. – 杜甫<<春夜喜雨>>

规范的透明化, 这是最高的境界, 这也是我所认为的 .editorconfig 这类工具机制背后的思想.

在技术层面, 你还能听过什么缓存透明化, 又或者什么透明地持久化, 这都表明这些东西起了作用而你甚至都没有意识到它们的存在, 无需你去关注.

任何东西, 你不主动去控制, 都可能走向失控, 这就是"水往低处流"的熵增原理, 因此管理好一个项目, 需要你的控制力.

但控制是需要成本的, 被你控制的人也需要付出成本, 因此你会遇到阻力, 怎么去平衡这些则是对你的考验:

拔最多的鹅毛, 听最少的鹅叫!

关于 .editorconfig 文件的介绍就到这里.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品经理进阶:硬件产品定价指南

目录 介绍 基于成本的定价 基于市场的定价 基于价值的定价 总结一下 CSDN学员课程 优惠活动通知 介绍 定价本身其实是一个相对复杂的过程。 因为有很多变量会影响到你最终的定价。 比如说&#xff1a;客户的维度、竞争对手的维度、成本的维度等等。 但是无论如何&am…

Impala3.4源码阅读笔记(三)data-cache的Store实现

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 正文 本文顺承前文Impala3.4源码阅读笔记&a…

mac电脑上,webm格式怎么转换成mp4?

mac电脑上&#xff0c;webm格式怎么转换成mp4&#xff1f;webm格式的视频也是最近几年也越来越多的&#xff0c;小编最近就不止一次的下载到过webm格式的视频&#xff0c;很多小伙伴肯定对它还并不是很了解&#xff0c;webm是由谷歌公司所提出以及开发出来的视频文件格式&#…

matlab读取STK生成的报告

一、STK 和 Matlab的生成的图片对比 &#xff08;一&#xff09;STK图片 &#xff08;二&#xff09;Matlab图片 &#xff08;三&#xff09;STK生成的报表数据 "Time (UTCG)","Azimuth (deg)","Elevation (deg)","Range (km)" 20 J…

编译Android平台的OpenCV库并启用OpenCL及Contrib

1.下载好OpenCV与OpenCV_Contirb 版本: 4.7 编译主机系统: Ubuntu 20.04 LTS 准备环境与工具: ANDRIOD SDK 与 NDK ,CMAKE ,NINJA ,GCC,G++ ,MAKE 开始编译: ../opencv/platforms/android/build_sdk.py --extra_modules_path=../opencv_contrib/modules --no_samples_bu…

坚固型3DMAG™ A31315LOLATR-XZ-S-SE-10、A31315LOLATR-XY-S-AR-10霍尔效应磁性位置传感器IC

A31315 3D磁性位置传感器IC是完全集成的坚固型3DMAG™ 霍尔效应磁性位置传感器IC&#xff0c;主要用于支持汽车、工业和消费类应用中的各种非接触式旋转和线性位置测量。 A31315传感器IC集成了垂直和平面霍尔效应元件&#xff0c;可检测三个磁场分量&#xff08;X、Y和Z&#x…

spring如何使用junit进行测试

第一步maven的pom.xml引入坐标&#xff1a; <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency> 第二步编写测试方法&#xff1a; 第三步 定义scope类型

gpt4实现对摄像头帧缓冲区图像的LAB阈值选择界面(python-opencv)

代码全是GPT4写的&#xff0c;我就提出Prompt和要改的地方而已。 图形界面效果 代码 import cv2 import numpy as np import time from tkinter import * from PIL import Image, ImageTkclass App:def __init__(self, window, window_title, video_source0):self.window wi…

【面试】美团面试真题和答案

文章目录 前言1.线程池有几种实现方式&#xff1f;2.线程池的参数含义&#xff1f;3.锁升级的过程&#xff1f;4.i 如何保证线程安全&#xff1f;5.HashMap和ConcurrentHashMap有什么区别&#xff1f;6.Autowired和Resource区别&#xff1f;7.说说常用的设计模式8.Redis为什么这…

react中使用 websocket

react中使用 websocket&#xff0c;使用socket.io库 参考官网地址&#xff1a; https://socket.io/zh-CN/docs/v4/client-installation/#from-npm 1.安装 npm install socket.io-client2.示例代码 import React, { useEffect, useRef, useState } from "react"; i…

Mysql数据库(四) Mysql命令行客户端数据条件查询、排序、分组、聚合函数

目录 一、where条件查询 ① 查询年龄大于/等于18岁的学生记录。 ② 查询名字以张开头的学生记录。 ③ 范围查询 二、order by 排序 ① 按照name列升序排序 ② 按照name列降序排序 ③ 先按 name 降序&#xff0c;再按 age 升序排序 ④ 可以使用表达式或函数来进行排序 …

【Nginx】Nginx负载均衡

Nginx 负载均衡 1.Nginx 负载均衡1.1 官方文档1.2 默认方式&#xff1a;轮询&#xff08;round-robin&#xff09;1.3 链接最少、空闲&#xff08;least-connected&#xff09;1.4 会话持续&#xff0c;也叫ip 哈希&#xff08;Session persistence&#xff09;1.5 服务器权重&…

前端学习——CSS3

新增长度单位 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>Document</title><style>* {margin: 0;padding: 0;}.box1 {width: 200px;height: 200px;background-color: deepskyblue;…

JMeter元件

【测试计划–线程组/Threads(Users)】 模拟大量用户负载的情况&#xff0c;线程组可以设置运行的线程数(多少线程就代表多少用户)&#xff1b; 【测试计划–线程组–取样器/sampler】 用来模拟用户操作&#xff0c;向服务器发出http请求、Webservice请求、java请求等&#xf…

采用VMD按照某一坐标轴旋转坐标结构

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

【设计模式】第七章:代理模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

二叉树 — 折纸问题

题目&#xff1a; 一道Google真实出现过的面试题 将一段纸条放在桌上&#xff0c;然后从纸条下边向上方对折1次&#xff0c;压出折痕后展开&#xff0c;此时折痕是凹下去的&#xff08;称为凹折痕&#xff09;&#xff0c;即折痕凸起的方向指向纸条的背面。如果从纸条的下边向上…

CodeForces..碰撞字符.[简单].[遍历求最大连续]

题目描述&#xff1a; 题目解读&#xff1a; 输入仅由<和>组成的字符串s&#xff0c;给定数组a&#xff0c;a满足 a[i] 和 a[i1] 之间的比较运算符为 s[i] 给出字符串a中不同字符的最小个数。 解题思路&#xff1a; 判断字符<和>的最大连续次数即可&#xff0c;…

MySQL注入-SQLi-Less1笔记

前置知识点&#xff1a; 1. SELECT 1,2,3 用于查询数据通道的方式 例如Less-1中,Secury数据库中的users表结构如下&#xff0c;可以看到有散列&#xff0c;当用户在页面输入id的时候&#xff0c;会查询到对应的散列数据也就是<id>/<username>/<password>&a…

复健练习1—取模与快速幂

复建练习1—取模与快速幂 A&#xff0c;poj3070 没啥可说的&#xff0c;就是裸的矩阵快速幂 #include <algorithm> #include <iostream> #include <cstring> #include <cmath> #include <iomanip>using namespace std; typedef long long ll;…