Jump to content

Lint (software): Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Tags: Reverted extraneous markup
FreeBSD removed xlint in 2018, NetBSD maintains the program
 
(27 intermediate revisions by 20 users not shown)
Line 1: Line 1:
{{short description|Tool to flag poor code}}
{{Short description|Tool to flag poor computer code}}
'''Lint''' is the [[computer science]] term for a [[Static program analysis|static code analysis]] tool used to flag programming errors, [[Software bug|bugs]], stylistic errors and suspicious constructs.<ref>{{cite web|url=http://www.sublimelinter.com/en/v3.10.10/about.html|title=About SublimeLinter|work=The SublimeLinter Community, revision 1cecc79c|archive-url=http://web.archive.org/web/20230606032819/http://www.sublimelinter.com/en/v3.10.10/about.html |access-date=2020-03-29|archive-date=2023-06-06 }}</ref> The term originates from a [[Unix]] [[List of utility software|utility]] that examined [[C (programming language)|C language]] source code.<ref name="BellLabs">{{cite journal |last=Johnson |first=Stephen C. |author-link=Stephen C. Johnson |date=25 October 1978 |title=Lint, a C Program Checker |url=https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.56.1841 |url-status=dead |journal=Comp. Sci. Tech. Rep. |publisher=Bell Labs |pages=78–1273 |citeseerx=10.1.1.56.1841 |archive-url=https://web.archive.org/web/20220123141016/https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.56.1841&rep=rep1&type=pdf |archive-date=2022-01-23}}</ref> A program which performs this function is also known as a "linter".
{{redirect-multi|3|Linting|Linter (software)|Lint tool|the MediaWiki extension|Wikipedia:Linter}}

==History==
{{Infobox Software
{{Infobox Software
| name = Lint
| name = Lint
Line 19: Line 21:
| programming language = [[C (programming language)|C]]
| programming language = [[C (programming language)|C]]
}}
}}
[[Stephen C. Johnson]], a computer scientist at [[Bell Labs]], came up with the term "lint" in 1978 while debugging the [[yacc]] grammar he was writing for [[C (programming language)|C]] and dealing with [[Software portability|portability]] issues stemming from porting [[Unix]] to a [[32-bit]] machine.<ref name="red"/><ref name="BellLabs"/> The term was borrowed from the word [[Lint (material)|lint]], the tiny bits of fiber and fluff shed by clothing, as the command he wrote would act like a lint trap in a clothes dryer, capturing waste fibers while leaving whole fabrics intact. In 1979, lint programming was used outside of Bell Labs for the first time, in the seventh version ([[Version 7 Unix|V7]]) of Unix.
'''Lint''', or a '''linter''', is a [[Static program analysis|static code analysis]] tool used to flag programming errors, [[Software bug|bugs]], stylistic errors and suspicious constructs.<ref>{{cite web|url=http://www.sublimelinter.com/en/v3.10.10/about.html|title=About SublimeLinter|work=The SublimeLinter Community, revision 1cecc79c|access-date=2020-03-29}}</ref> The term originates from a [[Unix]] [[List of utility software|utility]] that examined [[C (programming language)|C language]] source code.<ref name="BellLabs">{{cite journal |title=Lint, a C Program Checker |first=Stephen C. |last=Johnson |author-link= Stephen C. Johnson |date=25 October 1978 |journal=Comp. Sci. Tech. Rep. |publisher=Bell Labs |pages=78–1273 |citeseerx = 10.1.1.56.1841}}</ref>

==History==
[[Stephen C. Johnson]], a computer scientist at [[Bell Labs]], came up with lint in 1978 while debugging the [[yacc]] grammar he was writing for [[C (programming language)|C]] and dealing with [[Software portability|portability]] issues stemming from porting [[Unix]] to a [[32-bit]] machine.<ref name="red"/><ref name="BellLabs"/> The term "lint" was derived from [[Lint (material)|lint]], the name for the tiny bits of fiber and fluff shed by clothing, as the command should act like the lint trap in a clothes dryer, detecting small errors to great effect. In 1979, lint was used outside of Bell Labs for the first time, in the seventh version ([[Version 7 Unix|V7]]) of Unix.


Over the years, different versions of lint have been developed for many [[C (programming language)|C]] and [[C++]] [[compiler]]s, and while modern-day compilers have lint-like functions, lint-like tools have also advanced their capabilities. For example, Gimpel's [[PC-Lint]], introduced in 1985 and used to analyze C++ source code, is still for sale.<ref name="red">{{cite news|last1=Morris|first1=Richard|title=Stephen Curtis Johnson: Geek of the Week|url=https://www.red-gate.com/simple-talk/opinion/geek-of-the-week/stephen-curtis-johnson-geek-of-the-week/|access-date=19 January 2018|work=Red Gate Software|date=1 October 2009}}</ref>
Over the years, different versions of lint have been developed for many [[C (programming language)|C]] and [[C++]] [[compiler]]s, and while modern-day compilers have lint-like functions, lint-like tools have also advanced their capabilities. For example, Gimpel's [[PC-Lint]], introduced in 1985 and used to analyze C++ source code, is still for sale.<ref name="red">{{cite news|last1=Morris|first1=Richard|title=Stephen Curtis Johnson: Geek of the Week|url=https://www.red-gate.com/simple-talk/opinion/geek-of-the-week/stephen-curtis-johnson-geek-of-the-week/|access-date=19 January 2018|work=Red Gate Software|date=1 October 2009}}</ref>


'''Bold text'''==Overview==
==Overview==
The analysis performed by lint-like tools can also be performed by an [[optimizing compiler]], which aims to generate faster code. In his original 1978 paper, Johnson addressed this issue, concluding that "the general notion of having two programs is a good one" because they concentrate on different things, thereby allowing the programmer to "concentrate at one stage of the programming process solely on the [[algorithm]]s, [[data structure]]s, and correctness of the program, and then later retrofit, with the aid of lint, the desirable properties of universality and portability".<ref name="BellLabs"/>
In his original 1978 paper Johnson stated his reasoning in creating a separate program to detect errors, distinct from that which it analyzed: "...the general notion of having two programs is a good one" [because they concentrate on different things, thereby allowing the programmer to] "concentrate at one stage of the programming process solely on the [[algorithm]]s, [[data structure]]s, and correctness of the program, and then later retrofit, with the aid of lint, the desirable properties of universality and portability".<ref name="BellLabs"/>


== Successor linters ==
Even though modern [[compiler]]s have evolved to include many of lint's historical functions, lint-like tools have also evolved to detect an even wider variety of suspicious constructs. These include "warnings about syntax errors, uses of [[Undefined variable|undeclared variables]], calls to deprecated functions, spacing and formatting conventions, misuse of scope, implicit fallthrough in [[Switch statement|switch statements]], missing license headers, [and]...dangerous language features".<ref name="phab">{{cite web|title=Arcanist User Guide: Lint|url=https://secure.phabricator.com/book/phabricator/article/arcanist_lint/|website=Phabricator|access-date=19 January 2018}}</ref>
The analysis performed by lint-like tools can also be performed by an [[optimizing compiler]], which aims to generate faster code. Even though modern [[compiler]]s have evolved to include many of lint's historical functions, lint-like tools have also evolved to detect an even wider variety of suspicious constructs. These include "warnings about syntax errors, uses of [[Undefined variable|undeclared variables]], calls to deprecated functions, spacing and formatting conventions, misuse of scope, implicit fallthrough in [[Switch statement|switch statements]], missing license headers, [and]...dangerous language features".<ref name="phab">{{cite web|title=Arcanist User Guide: Lint|url=https://secure.phabricator.com/book/phabricator/article/arcanist_lint/|website=Phabricator|access-date=19 January 2018}}</ref>


Lint-like tools are especially useful for [[Type system#DYNAMIC|dynamically typed languages]] like [[JavaScript]] and [[Python (programming language)|Python]]. Because the compilers of such languages typically do not enforce as many and as strict rules prior to [[Execution (computing)|execution]], linter tools can also be used as simple debuggers for finding common errors (e.g. syntactic discrepancies) as well as hard-to-find errors such as [[heisenbug]]s (drawing attention to suspicious code as "possible errors").<ref>{{Cite web|url=https://www.thecodecampus.de/blog/eslint-customizable-javascript-linting-tool-1/|title=ESLint - Customizable JavaScript linting tool (1)|date=2015-06-09|website=theCodeCampus|language=en-US|access-date=2019-04-21}}</ref> Lint-like tools generally perform [[static code analysis|static analysis]] of source code.<ref>{{cite news|url=https://barrgroup.com/Embedded-Systems/How-To/Lint-Static-Analysis-Tool|title=How to Use Lint for Static Code Analysis|date=1 May 2002|work=Barr Group|first=Nigel| last = Jones}}</ref>
Lint-like tools are especially useful for [[Type system#DYNAMIC|dynamically typed languages]] like [[JavaScript]] and [[Python (programming language)|Python]]. Because the interpreters of such languages typically do not enforce as many and as strict rules during [[Execution (computing)|execution]], linter tools can also be used as simple [[debugger]]s for finding common errors (e.g. syntactic discrepancies) as well as hard-to-find errors such as [[heisenbug]]s (drawing attention to suspicious code as "possible errors").<ref>{{Cite web|url=https://www.thecodecampus.de/blog/eslint-customizable-javascript-linting-tool-1/|title=ESLint - Customizable JavaScript linting tool (1)|date=2015-06-09|website=theCodeCampus|language=en-US|access-date=2019-04-21}}</ref> Lint-like tools generally perform [[static code analysis|static analysis]] of source code.<ref>{{cite news|url=https://barrgroup.com/Embedded-Systems/How-To/Lint-Static-Analysis-Tool|title=How to Use Lint for Static Code Analysis|date=1 May 2002|work=Barr Group|first=Nigel| last = Jones}}</ref>


Lint-like tools have also been developed for other aspects of software development: enforcing grammar and style guides for given language source code.{{cn|date=July 2020}} Some tools (such as [[ESLint]]) also allow rules to be auto-fixable: a rule definition can also come with the definition of a transform that makes the rule no longer not triggered. Rules about style are especially likely to come with an auto-fix. If the linter is run in "fix all" mode on a file that triggers only rules about formatting, the linter will act just like a formatter.
Lint-like tools have also been developed for other aspects of language, including grammar and style guides.{{cn|date=July 2020}}diyardler jack_barzani0 ≠

==Specialization==

===Fortran===
[[Fortran]] compilers using space-squeezing techniques{{efn|Software: reads the source statements into memory, discards comment lines, removes spaces except in text literals, concatenates continuation lines}} (e.g. [[IBM 1130#Software|IBM 1130]]) made it impossible for the compiler to see the problem with lines like:
::::: .... DO 120 J=1<U>.</U>256 ... 120 CONTINUE
which is why programs like ''Lint for Fortran''<ref>''Lint for Fortran'': {{cite magazine |magazine=Digital Review
|title=Shaking down your FORTRAN programs
|quote=similar to DEC's Source Code Analyzer, .. comes into play much earlier .. before users compile their programs
|author=Denis W. Haskin |date=May 2, 1988 |pages=41–47}}</ref> can be helpful.<ref>{{cite web
|url=https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=comp-fortran-90;64aedb7c.02
|quote=Fortran90-lint, for Fortran 90 program analysis, also other tools, from http://www.cleanscape.net/stdprod/ftp/ftpflint.html
|title=COMP-FORTRAN-90 Archives}}</ref><ref>{{cite web
|url=https://techpubs.jurassic.nl/manuals/0640/developer/Debugger_UG/sgi_html/ch02.html
|title=Chapter 2. Basic Debugger Usage
|quote=There is a public domain version of lint for FORTRAN 77 called ftnchek}}</ref>


==See also==
==See also==
*[[Splint (programming tool)]]
*[[Splint (programming tool)]]
*[[List of tools for static code analysis]]
*[[List of tools for static code analysis]]

==Notes==
{{Notelist}}


==References==
==References==

{{Reflist}}
{{Reflist}}


Line 65: Line 45:
* {{cite book|last1=Darwin|first1=Ian F.|title=Checking C Programs with Lint: C Programming Utility|date=1991|publisher=O'Reilly Media|location=United States |isbn=978-0937175309|edition=Revised|url=https://books.google.com/books?id=vweTteq3OLQC}}
* {{cite book|last1=Darwin|first1=Ian F.|title=Checking C Programs with Lint: C Programming Utility|date=1991|publisher=O'Reilly Media|location=United States |isbn=978-0937175309|edition=Revised|url=https://books.google.com/books?id=vweTteq3OLQC}}
* {{cite web
* {{cite web
| url=https://www.freebsd.org/cgi/man.cgi?query=lint&manpath=FreeBSD+11.2-RELEASE
| url=https://man.netbsd.org/lint.1
| title=LINT(1)
| title=LINT(1)
| work=FreeBSD General Commands Manual (FreeBSD 11.2)
| work=NetBSD General Commands Manual
| date=2015-03-23}}
| date=2024-01-24}}


[[Category:Static program analysis tools]]
[[Category:Static program analysis tools]]
[[Category:Unix software]]
[[Category:Unix software]]
[[Category:Formerly proprietary software]]
[[Category:Software using the BSD license]]

Latest revision as of 16:18, 1 December 2024

Lint is the computer science term for a static code analysis tool used to flag programming errors, bugs, stylistic errors and suspicious constructs.[1] The term originates from a Unix utility that examined C language source code.[2] A program which performs this function is also known as a "linter".

History

[edit]
Lint
Original author(s)Stephen C. Johnson
Developer(s)AT&T Bell Laboratories
Initial releaseJuly 26, 1978; 46 years ago (1978-07-26)[2]
Written inC
Operating systemCross-platform
Available inEnglish
TypeStatic program analysis tools
LicenseOriginally proprietary commercial software, now free software under a BSD-like license[3][4]

Stephen C. Johnson, a computer scientist at Bell Labs, came up with the term "lint" in 1978 while debugging the yacc grammar he was writing for C and dealing with portability issues stemming from porting Unix to a 32-bit machine.[5][2] The term was borrowed from the word lint, the tiny bits of fiber and fluff shed by clothing, as the command he wrote would act like a lint trap in a clothes dryer, capturing waste fibers while leaving whole fabrics intact. In 1979, lint programming was used outside of Bell Labs for the first time, in the seventh version (V7) of Unix.

Over the years, different versions of lint have been developed for many C and C++ compilers, and while modern-day compilers have lint-like functions, lint-like tools have also advanced their capabilities. For example, Gimpel's PC-Lint, introduced in 1985 and used to analyze C++ source code, is still for sale.[5]

Overview

[edit]

In his original 1978 paper Johnson stated his reasoning in creating a separate program to detect errors, distinct from that which it analyzed: "...the general notion of having two programs is a good one" [because they concentrate on different things, thereby allowing the programmer to] "concentrate at one stage of the programming process solely on the algorithms, data structures, and correctness of the program, and then later retrofit, with the aid of lint, the desirable properties of universality and portability".[2]

Successor linters

[edit]

The analysis performed by lint-like tools can also be performed by an optimizing compiler, which aims to generate faster code. Even though modern compilers have evolved to include many of lint's historical functions, lint-like tools have also evolved to detect an even wider variety of suspicious constructs. These include "warnings about syntax errors, uses of undeclared variables, calls to deprecated functions, spacing and formatting conventions, misuse of scope, implicit fallthrough in switch statements, missing license headers, [and]...dangerous language features".[6]

Lint-like tools are especially useful for dynamically typed languages like JavaScript and Python. Because the interpreters of such languages typically do not enforce as many and as strict rules during execution, linter tools can also be used as simple debuggers for finding common errors (e.g. syntactic discrepancies) as well as hard-to-find errors such as heisenbugs (drawing attention to suspicious code as "possible errors").[7] Lint-like tools generally perform static analysis of source code.[8]

Lint-like tools have also been developed for other aspects of software development: enforcing grammar and style guides for given language source code.[citation needed] Some tools (such as ESLint) also allow rules to be auto-fixable: a rule definition can also come with the definition of a transform that makes the rule no longer not triggered. Rules about style are especially likely to come with an auto-fix. If the linter is run in "fix all" mode on a file that triggers only rules about formatting, the linter will act just like a formatter.

See also

[edit]

References

[edit]
  1. ^ "About SublimeLinter". The SublimeLinter Community, revision 1cecc79c. Archived from the original on 2023-06-06. Retrieved 2020-03-29.
  2. ^ a b c d Johnson, Stephen C. (25 October 1978). "Lint, a C Program Checker". Comp. Sci. Tech. Rep. Bell Labs: 78–1273. CiteSeerX 10.1.1.56.1841. Archived from the original on 2022-01-23.
  3. ^ "UNIX is free!". lemis.com. 2002-01-24.
  4. ^ Broderick, Bill (January 23, 2002). "Dear Unix enthusiasts" (PDF). Caldera International. Archived from the original (PDF) on February 19, 2009.
  5. ^ a b Morris, Richard (1 October 2009). "Stephen Curtis Johnson: Geek of the Week". Red Gate Software. Retrieved 19 January 2018.
  6. ^ "Arcanist User Guide: Lint". Phabricator. Retrieved 19 January 2018.
  7. ^ "ESLint - Customizable JavaScript linting tool (1)". theCodeCampus. 2015-06-09. Retrieved 2019-04-21.
  8. ^ Jones, Nigel (1 May 2002). "How to Use Lint for Static Code Analysis". Barr Group.

Further reading

[edit]