本申请公开了一种代码定位方法及装置,方法包括:接收定位请求指令,定位请求指令至少包括待定位的目标代码块的至少一个属性信息;响应于所述定位请求指令,获得目标代码块所属的代码文件的第一位置链表,其中,第一位置链表中包括至少一个位置对象,位置对象中包括其对应的代码块的描述信息;在第一位置链表内,确定目标位置对象,目标位置对象具有与目标代码块的属性信息相对应的描述信息;基于目标位置对象的描述信息,获得目标代码块在代码文件中的位置信息。可见,本申请中利用代码文件的包含各代码块的描述信息的位置对象来定位目标代码块在代码文件中的位置信息,无需人工查找等操作,进而节省定位消耗的工作时长,从而提高定位效率。
A Code Location Method and Device
【技术实现步骤摘要】
一种代码定位方法及装置
本申请涉及软件开发
,特别涉及一种代码定位方法及装置。
技术介绍
ProtocolBuffers是一种轻便高效的语言无关、平台无关、可扩展的序列化结构数据存储格式,可以编译成相应的C++、Java、Python类。目前,ProtocolBuffer通常使用元数据描述或记录代码块在代码文件中的相关信息,如名称或类型等属性信息。在ProtocolBuffer的使用过程中需要对代码块的元数据进行查找和定位修改位置等操作。而基于ProtocolBuffers中的代码块往往存在大量的引用、扩展、嵌套、重名等情况,由此,目前通过人工查找及定位的方式实现对代码块进行定位的方案,通常存在定位效率较低的问题。
技术实现思路
有鉴于此,本申请的目的在于提供一种代码定位方法及装置,用以解决现有技术中代码块定位的效率较低的技术问题。本申请提供了一种代码定位方法,包括:接收定位请求指令,所述定位请求指令至少包括待定位的目标代码块的至少一个属性信息;响应于所述定位请求指令,获得所述目标代码块所属的代码文件的第一位置链表,其中,所述第一位置链表中包括至少一个位置对象,所述位置对象中包括其对应的代码块的描述信息;在所述第一位置链表内,确定目标位置对象,所述目标位置对象具有与所述目标代码块的属性信息相对应的描述信息;基于所述目标位置对象的描述信息,获得所述目标代码块在所述代码文件中的位置信息。上述方法,优选地,所述在所述第一位置链表内的位置对象中,确定目标位置对象,包括:在所述第一位置链表内,筛选出具有与所述目标代码块的类型属性相对应的位置对象,以组成第二位置链表;在所述第二位置链表内的位置对象中,确定出具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象。上述方法,优选地,所述在所述第二位置链表内的位置对象中,确定出具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象,包括:在所述第二位置链表内,基于所述位置对象的描述信息所表征的所述位置对象之间的嵌套关系信息,获得嵌套在最外层的至少一个第一位置对象;在所述至少一个第一位置对象中以及所述第一位置对象内所嵌套的深层位置对象中,进行递归遍历,以确定出具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象。上述方法,优选地,所述在所述至少一个第一位置对象中及所述第一位置对象内所嵌套的深层位置对象中进行递归遍历,包括:从所述第一位置对象所在的最外层作为当前层开始,比对所述当前层的当前遍历深度与所述目标代码块的路径目标深度;如果所述当前遍历深度与所述路径目标深度相同,在所述当前层的位置对象中,查找具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象,结束遍历;如果所述当前遍历深度小于所述路径目标深度,在所述当前层的位置对象中,查找具有与所述目标代码块的完整路径相匹配的描述信息的命中位置对象,如果查找到,将所述当前遍历深度加1并将所述命中位置对象中所嵌套的下一层作为当前层,返回执行所述比对所述当前层的当前遍历深度与所述目标代码块的路径目标深度的步骤,如果没有查找到,结束遍历。上述方法,优选地,如果所述当前遍历深度与所述路径目标深度相同,所述方法还包括:如果所述当前遍历深度与所述路径目标深度相同且不为1,在所述当前层的位置对象中,基于所述当前层的位置对象所嵌套的最外层位置对象的描述信息,查找具有与所述目标代码块的名称属性相匹配的描述信息的目标位置对象,如果没有查找到,结束遍历;如果所述当前遍历深度与所述路径目标深度相同且为1,在所述当前层的位置对象中,基于所述当前层的位置对象的描述信息,查找具有与所述目标代码块的名称属性相匹配的描述信息的目标位置对象,如果没有查找到,结束遍历。上述方法,优选地,所述在所述第二位置链表内的位置对象中,确定出具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象,包括:在所述第二位置链表内的位置对象中,基于所述描述信息所表征的所述位置对象之间的嵌套关系信息,建立树形结构,所述树形结构包括至少一层节点,所述节点为所述第二位置链表内的位置对象;遍历所述树形结构中的节点,以确定具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象。上述方法,优选地,所述遍历所述树形结构中的节点,以确定具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象,包括:从所述树形结构中的第一层节点对应的位置对象开始,比对当前遍历深度与所述目标代码块的路径目标深度;如果所述当前遍历深度与所述路径目标深度相同且均为1,在所述当前层的位置对象中,基于所述当前层的位置对象的描述信息,查找与所述目标代码块的名称属性相匹配的描述信息的目标位置对象,如果没有查找到,结束遍历;如果所述当前遍历深度小于所述路径目标深度,在所述当前层的位置对象中,查找具有与所述目标代码块的完整路径相匹配的描述信息的命中位置对象,如果查找到,将所述当前遍历深度加1并将所述命中位置对象所嵌套的下一层作为当前层,返回执行所述比对当前遍历深度与所述目标代码块的路径目标深度的步骤,如果没有查找到,结束遍历;如果所述当前遍历深度与所述路径目标深度相同且不为1,在所述当前层的位置对象中,基于所述当前层的位置对象的描述信息,查找具有与所述目标代码块的名称属性相匹配的描述信息的目标位置对象,如果没有查找到,结束遍历。本申请还提供了一种代码定位装置,包括:接收单元,用于接收定位请求指令,所述定位请求指令至少包括待定位的目标代码块的至少一个属性信息;获得单元,用于响应于所述定位请求指令,获得所述目标代码块所属的代码文件的第一位置链表,其中,所述第一位置链表中包括至少一个位置对象,所述位置对象中包括其对应的代码块的描述信息;确定单元,用于在所述第一位置链表内的位置对象中,确定目标位置对象,所述目标位置对象具有与所述目标代码块的属性信息相对应的描述信息;位置获取单元,用于基于所述目标位置对象的描述信息,获得所述目标代码块在所述代码文件中的位置信息。由以上方案可知,本申请提供的一种代码定位方法及装置,通过获得待定位的目标代码块所在代码文件的位置链表,进而在位置链表中所包含的具有代码块描述信息的位置对象中,定位到具有与目标代码块的属性信息相对应的描述信息的目标位置对象,进而在目标位置对象的描述信息中获得到目标代码块在代码文件中的相应位置信息,如起始行和起始列等。可见,本申请中利用代码文件的包含各代码块的描述信息的位置对象来定位目标代码块在代码文件中的位置信息,无需人工查找等操作,进而节省定位消耗的工作时长,从而提高定位效率。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本申请实施例一提供的一种代码定位方法的流程图;图2为本申请实施例的示例图;图3为本申请实施例提供的一种代码定位方法的部分流程图;图4及图5分别为本申请实施例的另一示例图;图6为本申请实施例二提供的一种代码定位装置的结构示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方本文档来自技高网...
【技术保护点】
1.一种代码定位方法,其特征在于,包括:接收定位请求指令,所述定位请求指令至少包括待定位的目标代码块的至少一个属性信息;响应于所述定位请求指令,获得所述目标代码块所属的代码文件的第一位置链表,其中,所述第一位置链表中包括至少一个位置对象,所述位置对象中包括其对应的代码块的描述信息;在所述第一位置链表内,确定目标位置对象,所述目标位置对象具有与所述目标代码块的属性信息相对应的描述信息;基于所述目标位置对象的描述信息,获得所述目标代码块在所述代码文件中的位置信息。
【技术特征摘要】
1.一种代码定位方法,其特征在于,包括:接收定位请求指令,所述定位请求指令至少包括待定位的目标代码块的至少一个属性信息;响应于所述定位请求指令,获得所述目标代码块所属的代码文件的第一位置链表,其中,所述第一位置链表中包括至少一个位置对象,所述位置对象中包括其对应的代码块的描述信息;在所述第一位置链表内,确定目标位置对象,所述目标位置对象具有与所述目标代码块的属性信息相对应的描述信息;基于所述目标位置对象的描述信息,获得所述目标代码块在所述代码文件中的位置信息。2.根据权利要求1所述的方法,其特征在于,所述在所述第一位置链表内的位置对象中,确定目标位置对象,包括:在所述第一位置链表内,筛选出具有与所述目标代码块的类型属性相对应的位置对象,以组成第二位置链表;在所述第二位置链表内的位置对象中,确定出具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象。3.根据权利要求2所述的方法,其特征在于,所述在所述第二位置链表内的位置对象中,确定出具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象,包括:在所述第二位置链表内,基于所述位置对象的描述信息所表征的所述位置对象之间的嵌套关系信息,获得嵌套在最外层的至少一个第一位置对象;在所述至少一个第一位置对象中以及所述第一位置对象内所嵌套的深层位置对象中,进行递归遍历,以确定出具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象。4.根据权利要求3所述的方法,其特征在于,所述在所述至少一个第一位置对象中及所述第一位置对象内所嵌套的深层位置对象中进行递归遍历,包括:从所述第一位置对象所在的最外层作为当前层开始,比对所述当前层的当前遍历深度与所述目标代码块的路径目标深度;如果所述当前遍历深度与所述路径目标深度相同,在所述当前层的位置对象中,查找具有与所述目标代码块的名称属性相对应的描述信息的目标位置对象,结束遍历;如果所述当前遍历深度小于所述路径目标深度,在所述当前层的位置对象中,查找具有与所述目标代码块的完整路径相匹配的描述信息的命中位置对象,如果查找到,将所述当前遍历深度加1并将所述命中位置对象中所嵌套的下一层作为当前层,返回执行所述比对所述当前层的当前遍历深度与所述目标代码块的路径目标深度的步骤,如果没有查找到,结束遍历。5.根据权利要求4所述的方法,其特征在于,如果所述当前遍历深度与所述路径目标深度相同,所述方法还包括:如果所述当前遍历深度与所述路径目标深度相同且不为1,在所述当前层的位置对象中,基于所述当前层的位置对象所嵌套的最外层位置对象的描述信息,查找具有与所述目标代码块的名...
【专利技术属性】
技术研发人员:武鑫,王天兴,
申请(专利权)人:北京奇艺世纪科技有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。