ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
173 lines (129 loc) • 10 kB
HTML
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>TsSimpleAst</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<link rel="stylesheet" href="/assets/css/style.css?v=71a391c40e7283d83416a246f2c61c5fcb76068a">
<!--
<link rel="stylesheet" href="/assets/css/style.css?v=71a391c40e7283d83416a246f2c61c5fcb76068a">
<link rel="stylesheet" href="/assets/css/custom-style.css?v=71a391c40e7283d83416a246f2c61c5fcb76068a">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="/assets/js/main.js"></script>-->
</head>
<body>
<div class="main">
<header class="container">
<div class="row">
<h1 onclick="document.location.href = '/'" class="headerLink">TsSimpleAst</h1>
<!--<p class="subText">Simple way to navigate and manipulate the TypeScript AST.</p>-->
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-3">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<nav class="sidebar-nav" id="navbarSupportedContent">
<ul class="navbar-nav navbar-default">
<li class="nav-item">
<a class="nav-link" href="/">Overview</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/setup">Setup</a>
<ul>
<li class=""><a href="/setup/index">Instantiating</a></li>
<li class=""><a href="/setup/adding-sourcefiles">Adding SourceFiles</a></li>
<li class="active"><a href="/setup/diagnostics">Diagnostics</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="/navigation">Navigation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/manipulation">Manipulation</a>
</li>
<li class="">
<a class="nav-link" href="/details/index">Details</a>
</li>
<li class="nav-item">
<a class="nav-link" href="http://github.com/dsherret/ts-simple-ast">View on GitHub</a>
</li>
</ul>
</nav>
</div>
<section class="container-fluid col-md-9">
<h2 id="diagnostics">Diagnostics</h2>
<p>Diagnostics (compile errors) can be retrieved on the AST or on source files by using the <code class="highlighter-rouge">.getDiagnostics()</code> method:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">diagnostics</span> <span class="o">=</span> <span class="nx">ast</span><span class="p">.</span><span class="nx">getDiagnostics</span><span class="p">();</span>
</code></pre>
</div>
<p>Calling it on a source file will only give you the diagnostics for that source file.</p>
<h3 id="diagnostic">Diagnostic</h3>
<h4 id="message-text">Message text</h4>
<p>Returned message text could be a <code class="highlighter-rouge">string</code> or a <code class="highlighter-rouge">DiagnosticMessageChain</code>:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">message</span> <span class="o">=</span> <span class="nx">diagnostic</span><span class="p">.</span><span class="nx">getMessageText</span><span class="p">();</span>
</code></pre>
</div>
<h4 id="source-file">Source file</h4>
<p>Source file the diagnostic occurs in:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">sourceFile</span> <span class="o">=</span> <span class="nx">diagnostic</span><span class="p">.</span><span class="nx">getSourceFile</span><span class="p">();</span>
</code></pre>
</div>
<h4 id="start--length">Start & length</h4>
<p>Position in the file and length of the diagnostic:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">start</span> <span class="o">=</span> <span class="nx">diagnostic</span><span class="p">.</span><span class="nx">getStart</span><span class="p">();</span> <span class="c1">// returns: number</span>
<span class="kd">const</span> <span class="nx">length</span> <span class="o">=</span> <span class="nx">diagnostic</span><span class="p">.</span><span class="nx">getLength</span><span class="p">();</span> <span class="c1">// returns: number</span>
</code></pre>
</div>
<h4 id="category">Category</h4>
<p>Categories can be warnings, errors, or just messages.</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">category</span> <span class="o">=</span> <span class="nx">diagnostic</span><span class="p">.</span><span class="nx">getCategory</span><span class="p">();</span> <span class="c1">// returns: ts.DiagnosticCategory</span>
</code></pre>
</div>
<h4 id="code">Code</h4>
<p>This is the error code number:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">code</span> <span class="o">=</span> <span class="nx">diagnostic</span><span class="p">.</span><span class="nx">getCode</span><span class="p">();</span> <span class="c1">// returns: number</span>
</code></pre>
</div>
<h4 id="source">Source</h4>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">source</span> <span class="o">=</span> <span class="nx">diagnostic</span><span class="p">.</span><span class="nx">getSource</span><span class="p">();</span> <span class="c1">// returns: string | undefined</span>
</code></pre>
</div>
<h3 id="diagnosticmessagechain">DiagnosticMessageChain</h3>
<p>A diagnostic message chain (DMC) will be returned by <code class="highlighter-rouge">diagnostic.getMessageText()</code> in certain scenarios.</p>
<p>According to the typescript compiler:</p>
<div class="highlighter-rouge"><pre class="highlight"><code>/**
* A linked list of formatted diagnostic messages to be used as part of a multiline message.
* It is built from the bottom up, leaving the head to be the "main" diagnostic.
* While it seems that DiagnosticMessageChain is structurally similar to DiagnosticMessage,
* the difference is that messages are all preformatted in DMC.
*/
</code></pre>
</div>
<p>The properties of a DMC are similar to a Diagnostic:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">messageText</span> <span class="o">=</span> <span class="nx">dmc</span><span class="p">.</span><span class="nx">getMessageText</span><span class="p">();</span> <span class="c1">// returns: string</span>
<span class="kd">const</span> <span class="nx">category</span> <span class="o">=</span> <span class="nx">dmc</span><span class="p">.</span><span class="nx">getCategory</span><span class="p">();</span> <span class="c1">// returns: ts.DiagnosticCategory</span>
<span class="kd">const</span> <span class="nx">code</span> <span class="o">=</span> <span class="nx">dmc</span><span class="p">.</span><span class="nx">getCode</span><span class="p">();</span> <span class="c1">// returns: number</span>
</code></pre>
</div>
<h4 id="next-dmc-in-linked-list">Next DMC in linked list</h4>
<p>Call <code class="highlighter-rouge">.getNext()</code>:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">next</span> <span class="o">=</span> <span class="nx">dmc</span><span class="p">.</span><span class="nx">getNext</span><span class="p">();</span> <span class="c1">// returns: DiagnosticMessageChain | undefined</span>
</code></pre>
</div>
<p><strong>Next step:</strong> <a href="../navigation/index">Navigating the AST</a></p>
</section>
</div>
</div>
<footer>
</footer>
</div>
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
<!--[if !IE]><script>fixScale(document);</script><![endif]-->
</body>
</html>