ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
148 lines (118 loc) • 10.1 kB
HTML
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>ts-simple-ast - Utilities</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=502728dc7b09041e36b06c50f79a13adbfb6f1b2">
<!--
<link rel="stylesheet" href="/assets/css/style.css?v=502728dc7b09041e36b06c50f79a13adbfb6f1b2">
<link rel="stylesheet" href="/assets/css/custom-style.css?v=502728dc7b09041e36b06c50f79a13adbfb6f1b2">
<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">ts-simple-ast</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">
<a class="nav-link" href="/setup">Setup</a>
</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="nav-item">
<a class="nav-link" href="/emitting">Emitting</a>
</li>
<li class="">
<a class="nav-link" href="/details/index">Details</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/utilities">Utilities</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="utilities">Utilities</h2>
<p>This is an outline of any utilities currently available in the library.</p>
<h3 id="get-compiler-options-from-tsconfigjson">Get compiler options from tsconfig.json</h3>
<p>Get the compiler options from a file by using the <code class="highlighter-rouge">getCompilerOptionsFromTsConfig</code> function:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span><span class="nx">getCompilerOptionsFromTsConfig</span><span class="p">}</span> <span class="k">from</span> <span class="s2">"ts-simple-ast"</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">result</span> <span class="o">=</span> <span class="nx">getCompilerOptionsFromTsConfig</span><span class="p">(</span><span class="s2">"file/path/to/tsconfig.json"</span><span class="p">);</span>
<span class="nx">result</span><span class="p">.</span><span class="nx">options</span><span class="p">;</span> <span class="c1">// compiler options</span>
<span class="nx">result</span><span class="p">.</span><span class="nx">errors</span><span class="p">;</span> <span class="c1">// diagnostics</span>
</code></pre>
</div>
<h3 id="type-guards">Type Guards</h3>
<p>There is a collection of type guard functions that are useful for finding out the type of a Node:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span><span class="nx">TypeGuards</span><span class="p">}</span> <span class="k">from</span> <span class="s2">"ts-simple-ast"</span><span class="p">;</span>
<span class="c1">// ... some code here that gets a node ...</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">TypeGuards</span><span class="p">.</span><span class="nx">isClassDeclaration</span><span class="p">(</span><span class="nx">node</span><span class="p">))</span> <span class="p">{</span>
<span class="c1">// node is of type ClassDeclaration in here</span>
<span class="p">}</span>
</code></pre>
</div>
<h3 id="printing-a-node">Printing a Node</h3>
<p>Usually with the library, you can print any node by calling the <code class="highlighter-rouge">.print()</code> method:</p>
<div class="language-ts highlighter-rouge"><pre class="highlight"><code><span class="nx">node</span><span class="p">.</span><span class="nx">print</span><span class="p">();</span> <span class="c1">// returns: string</span>
</code></pre>
</div>
<p>But sometimes you might want to print a compiler node. There’s a <code class="highlighter-rouge">printNode</code> utility function for doing that:</p>
<div class="language-ts highlighter-rouge"><pre class="highlight"><code><span class="k">import</span> <span class="o">*</span> <span class="k">as</span> <span class="nx">ts</span> <span class="k">from</span> <span class="s2">"typescript"</span><span class="p">;</span>
<span class="k">import</span> <span class="p">{</span><span class="nx">printNode</span><span class="p">}</span> <span class="k">from</span> <span class="s2">"ts-simple-ast"</span><span class="p">;</span>
<span class="c1">// Source: https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API</span>
<span class="kd">const</span> <span class="nx">tsFunctionDeclaration</span> <span class="o">=</span> <span class="nx">ts</span><span class="p">.</span><span class="nx">createFunctionDeclaration</span><span class="p">(</span>
<span class="cm">/*decorators*/</span> <span class="kc">undefined</span><span class="p">,</span>
<span class="cm">/*modifiers*/</span><span class="p">[</span><span class="nx">ts</span><span class="p">.</span><span class="nx">createToken</span><span class="p">(</span><span class="nx">ts</span><span class="p">.</span><span class="nx">SyntaxKind</span><span class="p">.</span><span class="nx">ExportKeyword</span><span class="p">)],</span>
<span class="cm">/*asteriskToken*/</span> <span class="kc">undefined</span><span class="p">,</span>
<span class="s2">"myFunction"</span><span class="p">,</span>
<span class="cm">/*typeParameters*/</span> <span class="kc">undefined</span><span class="p">,</span>
<span class="cm">/*parameters*/</span> <span class="p">[],</span>
<span class="cm">/*returnType*/</span> <span class="nx">ts</span><span class="p">.</span><span class="nx">createKeywordTypeNode</span><span class="p">(</span><span class="nx">ts</span><span class="p">.</span><span class="nx">SyntaxKind</span><span class="p">.</span><span class="nx">NumberKeyword</span><span class="p">),</span>
<span class="nx">ts</span><span class="p">.</span><span class="nx">createBlock</span><span class="p">([</span><span class="nx">ts</span><span class="p">.</span><span class="nx">createReturn</span><span class="p">(</span><span class="nx">ts</span><span class="p">.</span><span class="nx">createLiteral</span><span class="p">(</span><span class="mi">5</span><span class="p">))],</span> <span class="cm">/*multiline*/</span> <span class="kc">true</span><span class="p">),</span>
<span class="p">);</span>
<span class="c1">// optionally provide a source file and there is some printing options on this</span>
<span class="kd">const</span> <span class="nx">functionText</span> <span class="o">=</span> <span class="nx">printNode</span><span class="p">(</span><span class="nx">tsFunctionDeclaration</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">functionText</span><span class="p">);</span>
<span class="c1">// outputs:</span>
<span class="c1">// ========</span>
<span class="c1">// export function myFunction(): number {</span>
<span class="c1">// return 5;</span>
<span class="c1">// }</span>
</code></pre>
</div>
</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>