Ver Fonte

moving data to backend and fixing tests

Nate Stemen há 9 anos atrás
pai
commit
98909026f5

+ 0 - 1
services/web/app/coffee/Features/Metadata/MetaController.coffee

@@ -26,4 +26,3 @@ module.exports = MetaController =
 				docId: doc_id, meta: docMeta
 				docId: doc_id, meta: docMeta
 			}
 			}
 			res.sendStatus 200
 			res.sendStatus 200
-MetaController

+ 27 - 13
services/web/app/coffee/Features/Metadata/MetaHandler.coffee

@@ -1,14 +1,18 @@
 ProjectEntityHandler = require "../Project/ProjectEntityHandler"
 ProjectEntityHandler = require "../Project/ProjectEntityHandler"
 DocumentUpdaterHandler = require '../DocumentUpdater/DocumentUpdaterHandler'
 DocumentUpdaterHandler = require '../DocumentUpdater/DocumentUpdaterHandler'
+packageMapping = require "./packageMapping"
 
 
 
 
 module.exports = MetaHandler =
 module.exports = MetaHandler =
 
 
-	labelCaptureRegex: () ->
-		/\\label\{([^\}\n\\]{0,80})\}/g
+	labelRegex: () ->
+		/\\label{(.{0,80}?)}/g
 
 
-	packageCaptureRegex: () ->
-		/^\\usepackage(?:\[((?:.|\n)*?)])?\s*?{((?:.|\n)*?)}/gm
+	usepackageRegex: () ->
+		/^\\usepackage(?:\[.{0,80}?])?{(.{0,80}?)}/g
+
+	ReqPackageRegex: () ->
+		/^\\RequirePackage(?:\[.{0,80}?])?{(.{0,80}?)}/g
 
 
 	getAllMetaForProject: (projectId, callback=(err, projectMeta)->) ->
 	getAllMetaForProject: (projectId, callback=(err, projectMeta)->) ->
 		DocumentUpdaterHandler.flushProjectToMongo projectId, (err) ->
 		DocumentUpdaterHandler.flushProjectToMongo projectId, (err) ->
@@ -31,18 +35,28 @@ module.exports = MetaHandler =
 				callback null, docMeta
 				callback null, docMeta
 
 
 	extractMetaFromDoc: (lines) ->
 	extractMetaFromDoc: (lines) ->
-		docMeta = {labels: [], packages: []}
-		label_re = MetaHandler.labelCaptureRegex()
-		package_re = MetaHandler.packageCaptureRegex()
+		docMeta = {labels: [], packages: {}}
+		packages = []
+		label_re = MetaHandler.labelRegex()
+		package_re = MetaHandler.usepackageRegex()
+		req_package_re = MetaHandler.ReqPackageRegex()
 		for line in lines
 		for line in lines
 			while labelMatch = label_re.exec line
 			while labelMatch = label_re.exec line
-				if labelMatch[1]
-					docMeta.labels.push labelMatch[1]
+				if label = labelMatch[1]
+					docMeta.labels.push label
 			while packageMatch = package_re.exec line
 			while packageMatch = package_re.exec line
-				if packageMatch[2]
-					for pkg in packageMatch[2].split ','
-						if pkg.trim()
-							docMeta.packages.push pkg.trim()
+				if messy = packageMatch[1]
+					for pkg in messy.split ','
+						if clean = pkg.trim()
+							packages.push clean
+			while packageMatch = req_package_re.exec line
+				if messy = packageMatch[1]
+					for pkg in messy.split ','
+						if clean = pkg.trim()
+							packages.push clean
+		for pkg in packages
+			if packageMapping[pkg]?
+				docMeta.packages[pkg] = packageMapping[pkg]
 		return docMeta
 		return docMeta
 
 
 	extractMetaFromProjectDocs: (projectDocs) ->
 	extractMetaFromProjectDocs: (projectDocs) ->

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
services/web/app/coffee/Features/Metadata/packageMapping.coffee


+ 8 - 27
services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/CommandManager.coffee

@@ -1,14 +1,8 @@
 define [
 define [
-	"./top_hundred_snippets",
-	"./package_definition_snippets"
-], (topHundred, packageCommandMappings) ->
+	"./top_hundred_snippets"
+], (topHundred) ->
 
 
-	rawCommands = Object.keys topHundred
-
-	commandSnippets = []
-	for cmd, snippets of topHundred
-		for snippet in snippets
-			commandSnippets.push snippet
+	commandNames = (snippet.caption.match(/\w+/)[0] for snippet in topHundred)
 
 
 	class Parser
 	class Parser
 		constructor: (@doc, @prefix) ->
 		constructor: (@doc, @prefix) ->
@@ -104,29 +98,16 @@ define [
 		getCompletions: (editor, session, pos, prefix, callback) ->
 		getCompletions: (editor, session, pos, prefix, callback) ->
 			packages = @metadataManager.getAllPackages()
 			packages = @metadataManager.getAllPackages()
 			packageCommands = []
 			packageCommands = []
-			for pkg in packages
-				commands = packageCommandMappings[pkg]
-				if commands?
-					for command, snippets of commands
-						if command not in rawCommands
-							for snippet in snippets
-								packageCommands.push snippet
-			# for pkg in packages
-			# 	if packageCommandMappings[pkg]?
-			# 		for cmd in packageCommandMappings[pkg]
-			# 			packageCommands.push {
-			# 				caption: "\\#{cmd}"
-			# 				snippet: "\\#{cmd}"
-			# 				meta: "#{pkg}-cmd"
-			# 				score: 60
-			# 			}
+			for pkg, snippets of packages
+				for snippet in snippets
+					packageCommands.push snippet
 
 
 			doc = session.getValue()
 			doc = session.getValue()
 			parser = new Parser(doc, prefix)
 			parser = new Parser(doc, prefix)
 			commands = parser.parse()
 			commands = parser.parse()
 			completions = []
 			completions = []
 			for command in commands
 			for command in commands
-				if command[0] not in rawCommands
+				if command[0] not in commandNames
 					caption = "\\#{command[0]}"
 					caption = "\\#{command[0]}"
 					score = if caption == prefix then 99 else 50
 					score = if caption == prefix then 99 else 50
 					snippet = caption
 					snippet = caption
@@ -145,7 +126,7 @@ define [
 						meta: "cmd"
 						meta: "cmd"
 						score: score
 						score: score
 					}
 					}
-			completions = completions.concat commandSnippets, packageCommands
+			completions = completions.concat topHundred, packageCommands
 
 
 			callback null, completions
 			callback null, completions
 
 

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/package_definition_snippets.coffee


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/top_hundred_snippets.coffee


+ 16 - 9
services/web/public/coffee/ide/editor/directives/aceEditor/metadata/MetadataManager.coffee

@@ -23,24 +23,34 @@ define [
 				range = new Range(end.row, 0, end.row, end.column)
 				range = new Range(end.row, 0, end.row, end.column)
 				lineUpToCursor = @editor.getSession().getTextRange range
 				lineUpToCursor = @editor.getSession().getTextRange range
 				if lineUpToCursor.trim() == '%' or lineUpToCursor.startsWith '\\'
 				if lineUpToCursor.trim() == '%' or lineUpToCursor.startsWith '\\'
-					# fix in case change is just (un)comment out a package
-					range = new Range end.row, 0, end.row, end.column + 80
+					range = new Range(end.row, 0, end.row, end.column + 80)
 					lineUpToCursor = @editor.getSession().getTextRange range
 					lineUpToCursor = @editor.getSession().getTextRange range
 				commandFragment = getLastCommandFragment lineUpToCursor
 				commandFragment = getLastCommandFragment lineUpToCursor
 
 
 				linesContainPackage = _.any(
 				linesContainPackage = _.any(
 					change.lines,
 					change.lines,
-					(line) -> line.match(/\\usepackage(?:\[.*?])?\s*{.*?}/)
+					(line) -> line.match(/^\\usepackage(?:\[.{0,80}?])?{(.{0,80}?)}/)
+				)
+				linesContainReqPackage = _.any(
+					change.lines,
+					(line) -> line.match(/^\\RequirePackage(?:\[.{0,80}?])?{(.{0,80}?)}/)
 				)
 				)
 				linesContainLabel = _.any(
 				linesContainLabel = _.any(
 					change.lines,
 					change.lines,
-					(line) -> line.match(/\\label\{[^\}\n\\]{0,80}\}/)
+					(line) -> line.match(/\\label{(.{0,80}?)}/)
 				)
 				)
-				linesContainMeta = linesContainPackage or linesContainLabel
+				linesContainMeta =
+					linesContainPackage or
+					linesContainLabel or
+					linesContainReqPackage
 
 
 				lastCommandFragmentIsLabel = commandFragment?.startsWith '\\label{'
 				lastCommandFragmentIsLabel = commandFragment?.startsWith '\\label{'
 				lastCommandFragmentIsPackage = commandFragment?.startsWith '\\usepackage'
 				lastCommandFragmentIsPackage = commandFragment?.startsWith '\\usepackage'
-				lastCommandFragmentIsMeta = lastCommandFragmentIsPackage or lastCommandFragmentIsLabel
+				lastCommandFragmentIsReqPack = commandFragment?.startsWith '\\RequirePackage'
+				lastCommandFragmentIsMeta =
+					lastCommandFragmentIsPackage or
+					lastCommandFragmentIsLabel or
+					lastCommandFragmentIsReqPack
 
 
 				if linesContainMeta or lastCommandFragmentIsMeta
 				if linesContainMeta or lastCommandFragmentIsMeta
 					@scheduleLoadCurrentDocMetaFromServer()
 					@scheduleLoadCurrentDocMetaFromServer()
@@ -49,9 +59,6 @@ define [
 				e.oldSession.off "change", onChange
 				e.oldSession.off "change", onChange
 				e.session.on "change", onChange
 				e.session.on "change", onChange
 
 
-		# loadCurrentDocLabelsFromServer: () ->
-		# 	currentDocId = @$scope.docId
-		# 	@Metadata.loadDocMetaFromServer currentDocId
 
 
 		loadDocMetaFromServer: (docId) ->
 		loadDocMetaFromServer: (docId) ->
 			@Metadata.loadDocMetaFromServer docId
 			@Metadata.loadDocMetaFromServer docId

+ 6 - 4
services/web/public/coffee/ide/metadata/services/metadata.coffee

@@ -6,9 +6,7 @@ define [
 
 
 		state = {documents: {}}
 		state = {documents: {}}
 
 
-		metadata = {
-			state: state
-		}
+		metadata = {state: state}
 
 
 		metadata.onBroadcastDocMeta = (data) ->
 		metadata.onBroadcastDocMeta = (data) ->
 			if data.docId? and data.meta?
 			if data.docId? and data.meta?
@@ -26,7 +24,11 @@ define [
 			_.flatten(meta.labels for docId, meta of state.documents)
 			_.flatten(meta.labels for docId, meta of state.documents)
 
 
 		metadata.getAllPackages = () ->
 		metadata.getAllPackages = () ->
-			_.flatten(meta.packages for docId, meta of state.documents)
+			packageCommandMapping = {}
+			for _docId, meta of state.documents
+				for packageName, commandSnippets of meta.packages
+					packageCommandMapping[packageName] = commandSnippets
+			return packageCommandMapping
 
 
 		metadata.loadProjectMetaFromServer = () ->
 		metadata.loadProjectMetaFromServer = () ->
 			$http
 			$http

+ 94 - 12
services/web/test/UnitTests/coffee/Metadata/MetaHandlerTests.coffee

@@ -17,15 +17,39 @@ describe 'MetaHandler', ->
 		@DocumentUpdaterHandler = {
 		@DocumentUpdaterHandler = {
 			flushDocToMongo: sinon.stub()
 			flushDocToMongo: sinon.stub()
 		}
 		}
+		@packageMapping =
+			foo: [
+				{
+					caption: '\\bar'
+					snippet: '\\bar'
+					meta: 'foo-cmd'
+					score: 12
+				}, {
+					caption: '\\bat[]{}'
+					snippet: '\\bar[$1]{$2}'
+					meta: 'foo-cmd'
+					score: 10
+				}
+			],
+			baz: [
+				{
+					caption: '\\longercommandtest{}'
+					snippet: '\\longercommandtest{$1}'
+					meta: 'baz-cmd'
+					score: 50
+				}
+			]
+
 		@MetaHandler = SandboxedModule.require modulePath, requires:
 		@MetaHandler = SandboxedModule.require modulePath, requires:
 			'../Project/ProjectEntityHandler': @ProjectEntityHandler
 			'../Project/ProjectEntityHandler': @ProjectEntityHandler
 			'../DocumentUpdater/DocumentUpdaterHandler': @DocumentUpdaterHandler
 			'../DocumentUpdater/DocumentUpdaterHandler': @DocumentUpdaterHandler
+			'./packageMapping': @packageMapping
 
 
 	describe 'extractMetaFromDoc', ->
 	describe 'extractMetaFromDoc', ->
 		beforeEach ->
 		beforeEach ->
 			@lines = [
 			@lines = [
 				'\\usepackage{foo}'
 				'\\usepackage{foo}'
-				'\\usepackage{bar, baz}'
+				'\\usepackage{amsmath, booktabs}'
 				'one'
 				'one'
 				'two'
 				'two'
 				'three \\label{aaa}'
 				'three \\label{aaa}'
@@ -38,7 +62,20 @@ describe 'MetaHandler', ->
 			docMeta = @MetaHandler.extractMetaFromDoc @lines
 			docMeta = @MetaHandler.extractMetaFromDoc @lines
 			expect(docMeta).to.deep.equal {
 			expect(docMeta).to.deep.equal {
 				labels: ['aaa', 'bbb']
 				labels: ['aaa', 'bbb']
-				packages: ['foo', 'bar', 'baz']
+				packages:
+					foo: [
+						{
+							caption: '\\bar'
+							snippet: '\\bar'
+							meta: 'foo-cmd'
+							score: 12
+						}, {
+							caption: '\\bat[]{}'
+							snippet: '\\bar[$1]{$2}'
+							meta: 'foo-cmd'
+							score: 10
+						}
+					]
 			}
 			}
 
 
 	describe 'extractMetaFromProjectDocs', ->
 	describe 'extractMetaFromProjectDocs', ->
@@ -60,13 +97,13 @@ describe 'MetaHandler', ->
 				'doc_four':
 				'doc_four':
 					_id: 'id_four'
 					_id: 'id_four'
 					lines: [
 					lines: [
-						'\\usepackage[foo=bar,baz=bat]{ddd}'
-						'\\usepackage[draft]{something}'
+						'\\usepackage[width=\\textwidth]{baz}'
+						'\\usepackage{amsmath}'
 					]
 					]
 				'doc_five':
 				'doc_five':
 					_id: 'id_five'
 					_id: 'id_five'
 					lines: [
 					lines: [
-						'\\usepackage{this,that}'
+						'\\usepackage{foo,baz}'
 						'\\usepackage[options=foo]{hello}'
 						'\\usepackage[options=foo]{hello}'
 						'some text'
 						'some text'
 						'\\section{this}\\label{sec:intro}'
 						'\\section{this}\\label{sec:intro}'
@@ -77,11 +114,41 @@ describe 'MetaHandler', ->
 		it 'should extract all metadata', ->
 		it 'should extract all metadata', ->
 			projectMeta = @MetaHandler.extractMetaFromProjectDocs @docs
 			projectMeta = @MetaHandler.extractMetaFromProjectDocs @docs
 			expect(projectMeta).to.deep.equal {
 			expect(projectMeta).to.deep.equal {
-				'id_one': {labels: ['aaa'], packages: []}
-				'id_two': {labels: [], packages: []}
-				'id_three': {labels: ['bbb', 'ccc'], packages: []}
-				'id_four': {labels: [], packages: ['ddd', 'something']}
-				'id_five': {labels: ['sec:intro'], packages: ['this', 'that', 'hello']}
+				'id_one': {labels: ['aaa'], packages: {}}
+				'id_two': {labels: [], packages: {}}
+				'id_three': {labels: ['bbb', 'ccc'], packages: {}}
+				'id_four':
+					labels: []
+					packages:
+						baz: [{
+							caption: '\\longercommandtest{}'
+							snippet: '\\longercommandtest{$1}'
+							meta: 'baz-cmd'
+							score: 50}]
+				'id_five':
+					labels: ['sec:intro']
+					packages:
+						foo: [
+							{
+								caption: '\\bar'
+								snippet: '\\bar'
+								meta: 'foo-cmd'
+								score: 12
+							}, {
+								caption: '\\bat[]{}'
+								snippet: '\\bar[$1]{$2}'
+								meta: 'foo-cmd'
+								score: 10
+							}
+						]
+						baz: [
+							{
+								caption: '\\longercommandtest{}'
+								snippet: '\\longercommandtest{$1}'
+								meta: 'baz-cmd'
+								score: 50
+							}
+						]
 			}
 			}
 
 
 	describe 'getMetaForDoc', ->
 	describe 'getMetaForDoc', ->
@@ -127,11 +194,26 @@ describe 'MetaHandler', ->
 			@fakeDocs =
 			@fakeDocs =
 				'doc_one':
 				'doc_one':
 					lines: [
 					lines: [
-						'\\usepackage[some-options,more=foo]{pkg}'
+						'\\usepackage[some-options,more=foo]{foo}'
 						'\\label{aaa}'
 						'\\label{aaa}'
 					]
 					]
 
 
-			@fakeMeta = {labels: ['aaa'], packages: ['pkg']}
+			@fakeMeta =
+				labels: ['aaa']
+				packages:
+					foo: [
+						{
+							caption: '\\bar'
+							snippet: '\\bar'
+							meta: 'foo-cmd'
+							score: 12
+						}, {
+							caption: '\\bat[]{}'
+							snippet: '\\bar[$1]{$2}'
+							meta: 'foo-cmd'
+							score: 10
+						}
+					]
 			@DocumentUpdaterHandler.flushProjectToMongo = sinon.stub().callsArgWith 1, null
 			@DocumentUpdaterHandler.flushProjectToMongo = sinon.stub().callsArgWith 1, null
 			@ProjectEntityHandler.getAllDocs = sinon.stub().callsArgWith 1, null, @fakeDocs
 			@ProjectEntityHandler.getAllDocs = sinon.stub().callsArgWith 1, null, @fakeDocs
 			@MetaHandler.extractMetaFromProjectDocs = sinon.stub().returns @fakeMeta
 			@MetaHandler.extractMetaFromProjectDocs = sinon.stub().returns @fakeMeta

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff