• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

TypeScript language_services.getExpressionScope函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了TypeScript中@angular/compiler-cli/src/language_services.getExpressionScope函数的典型用法代码示例。如果您正苦于以下问题:TypeScript getExpressionScope函数的具体用法?TypeScript getExpressionScope怎么用?TypeScript getExpressionScope使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了getExpressionScope函数的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的TypeScript代码示例。

示例1: findAttribute

 const attributeValueSymbol = (ast: AST, inEvent: boolean = false): boolean => {
   const attribute = findAttribute(info);
   if (attribute) {
     if (inSpan(templatePosition, spanOf(attribute.valueSpan))) {
       const dinfo = diagnosticInfoFromTemplateInfo(info);
       const scope = getExpressionScope(dinfo, path, inEvent);
       if (attribute.valueSpan) {
         const expressionOffset = attribute.valueSpan.start.offset + 1;
         const result = getExpressionSymbol(
             scope, ast, templatePosition - expressionOffset, info.template.query);
         if (result) {
           symbol = result.symbol;
           span = offsetSpan(result.span, expressionOffset);
         }
       }
       return true;
     }
   }
   return false;
 };
开发者ID:MarkPieszak,项目名称:angular,代码行数:20,代码来源:locate_symbol.ts


示例2: locateSymbol

export function locateSymbol(info: TemplateInfo): SymbolInfo|undefined {
  if (!info.position) return undefined;
  const templatePosition = info.position - info.template.span.start;
  const path = findTemplateAstAt(info.templateAst, templatePosition);
  if (path.tail) {
    let symbol: Symbol|undefined = undefined;
    let span: Span|undefined = undefined;
    const attributeValueSymbol = (ast: AST, inEvent: boolean = false): boolean => {
      const attribute = findAttribute(info);
      if (attribute) {
        if (inSpan(templatePosition, spanOf(attribute.valueSpan))) {
          const dinfo = diagnosticInfoFromTemplateInfo(info);
          const scope = getExpressionScope(dinfo, path, inEvent);
          if (attribute.valueSpan) {
            const expressionOffset = attribute.valueSpan.start.offset + 1;
            const result = getExpressionSymbol(
                scope, ast, templatePosition - expressionOffset, info.template.query);
            if (result) {
              symbol = result.symbol;
              span = offsetSpan(result.span, expressionOffset);
            }
          }
          return true;
        }
      }
      return false;
    };
    path.tail.visit(
        {
          visitNgContent(ast) {},
          visitEmbeddedTemplate(ast) {},
          visitElement(ast) {
            const component = ast.directives.find(d => d.directive.isComponent);
            if (component) {
              symbol = info.template.query.getTypeSymbol(component.directive.type.reference);
              symbol = symbol && new OverrideKindSymbol(symbol, 'component');
              span = spanOf(ast);
            } else {
              // Find a directive that matches the element name
              const directive = ast.directives.find(
                  d => d.directive.selector != null && d.directive.selector.indexOf(ast.name) >= 0);
              if (directive) {
                symbol = info.template.query.getTypeSymbol(directive.directive.type.reference);
                symbol = symbol && new OverrideKindSymbol(symbol, 'directive');
                span = spanOf(ast);
              }
            }
          },
          visitReference(ast) {
            symbol = ast.value && info.template.query.getTypeSymbol(tokenReference(ast.value));
            span = spanOf(ast);
          },
          visitVariable(ast) {},
          visitEvent(ast) {
            if (!attributeValueSymbol(ast.handler, /* inEvent */ true)) {
              symbol = findOutputBinding(info, path, ast);
              symbol = symbol && new OverrideKindSymbol(symbol, 'event');
              span = spanOf(ast);
            }
          },
          visitElementProperty(ast) { attributeValueSymbol(ast.value); },
          visitAttr(ast) {},
          visitBoundText(ast) {
            const expressionPosition = templatePosition - ast.sourceSpan.start.offset;
            if (inSpan(expressionPosition, ast.value.span)) {
              const dinfo = diagnosticInfoFromTemplateInfo(info);
              const scope = getExpressionScope(dinfo, path, /* includeEvent */ false);
              const result =
                  getExpressionSymbol(scope, ast.value, expressionPosition, info.template.query);
              if (result) {
                symbol = result.symbol;
                span = offsetSpan(result.span, ast.sourceSpan.start.offset);
              }
            }
          },
          visitText(ast) {},
          visitDirective(ast) {
            symbol = info.template.query.getTypeSymbol(ast.directive.type.reference);
            span = spanOf(ast);
          },
          visitDirectiveProperty(ast) {
            if (!attributeValueSymbol(ast.value)) {
              symbol = findInputBinding(info, path, ast);
              span = spanOf(ast);
            }
          }
        },
        null);
    if (symbol && span) {
      return {symbol, span: offsetSpan(span, info.template.span.start)};
    }
  }
}
开发者ID:MarkPieszak,项目名称:angular,代码行数:93,代码来源:locate_symbol.ts



注:本文中的@angular/compiler-cli/src/language_services.getExpressionScope函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
TypeScript bundler.MetadataBundler类代码示例发布时间:2022-05-28
下一篇:
TypeScript compiler-cli.__NGTOOLS_PRIVATE_API_2类代码示例发布时间:2022-05-28
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap